2013-03-15 2 views
5

Итак, у меня есть субдомен, который является конечной точкой API для загрузки файлов. Но когда я пытаюсь загрузить все с JQuery для этого поддомена (из основного домена WWW) Я получаю ошибкуЗагрузка файла AJAX в междоменной jQuery

XMLHttpRequest не может загрузить http://1.storage.site.net/upload. Происхождение http://www.site.net не разрешено Access-Control-Allow-Origin.

Я попробовал все: заголовки в Nginx, заголовки в исходном коде, я даже попытался отправки файла незавершенная файл только с

<?php 

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); 
header('Access-Control-Max-Age: 1000'); 
header('Content-type: application/json'); 
header('Access-Control-Allow-Headers: *'); 

echo json_encode(['lulz' => 123]); 

В двух словах: ничего не работает.

НО. Я заметил, что небольшие файлы (~ 1 МБ) загружаются правильно и файлы немного больше (скажем, 5 МБ) - НЕ (происхождение не разрешено).

Есть ли способ решить это?

+0

Странно, что небольшие файлы работают. Я бы не ожидал, что ничего не получится, поскольку это является нарушением политики того же происхождения (http://en.wikipedia.org/wiki/Same_origin_policy). –

+1

@Mike, поэтому он отправляет заголовки 'Access-Control- *'. Они говорят браузеру: «Я знаю, что это нарушение политики, но это круто, парень». http://en.wikipedia.org/wiki/Same_origin_policy#Cross-Origin_Resource_Sharing –

ответ

2

Моя ставка заключается в том, что файл 5 МБ слишком велик для настройки Apache max_request_body (или как бы там ни было его название), что приводит к тому, что скрипт PHP не выполняется, поэтому никогда не получается отправлять те заголовки, которые, в свою очередь, генерируют вводящий в заблуждение крест ошибка домена.

Если это предположение верно, вы должны увидеть более подробную информацию на вкладке «Сеть» вашего браузера - сценарий загрузки должен возвращать какое-либо условие ошибки.

Чтобы отлаживать, вы можете выполнить обычную загрузку файлов на основе форм, проверить это и настроить все до тех пор, пока оно не будет работать.

+1

Да, оказывается, что браузеры не могут корректно отображать ошибку 413. Когда я попытался загрузить файл не с AJAX, но напрямую (с формой html), я получил 412 html-ошибку. Это было о настройке nginx client_max_body_size. –

+0

Ну, если это был ответ, проверьте это. –