Проблемы с выполнением XMLHttpRequest из файла: // в http: // - PullRequest
4 голосов
/ 09 сентября 2010

Я пытаюсь сделать запрос XMLHttpRequest из локального файла (file: //), используя JQuery.ajax для чего-то на http: //, и из того, что я вижу, выглядит запросвыход (обратный вызов успеха вызывается, и Firebug показывает запрос), но ответа просто не возвращается.

Вот в основном то, что я делаю:

$.ajax({
    url: "https://stackoverflow.com/users/63736/bruce-van-der-kooij",
    dataType: "text",
    success: function(text) {
        alert(text)
    }
})

Обратите внимание, что яиспользуя datatype: "text", но это не имеет значения, что вы используете.

Это покажет пустое предупреждение.

Теперь, если бы я должен был догадаться, я должен сказать, что это что-то имеетделать с той же политикой происхождения, но я не получаю типичное NS_ERROR_DOM_SECURITY_ERR исключение (в консоли ошибок ничего нет).

Так есть ли у кого-нибудь объяснение того, что происходит?

Связано

ОБНОВЛЕНИЕ:

Итак, я наткнулся на статью июля 2009 года на hacks.mozilla.org , которая, кажется, объясняет, что яидет.Очевидно, что Firefox> = 3.5 реализует спецификацию общего доступа к ресурсам (CORS) , которая предоставляет механизм, позволяющий вам делать межсайтовые запросы.Что происходит в этом случае, объясняется в статье:

В Firefox 3.5 и Safari 4 межсайтовый XMLHttpRequest не сможет успешно получить ресурс, если сервер не предоставит соответствующие заголовки CORS.(в частности, заголовок Access-Control-Allow-Origin) обратно с ресурсом, хотя запрос будет выполнен.

Обратите внимание, что в моем случае запрос отправляется с заголовком Origin: null и200 OK ответ возвращается.Однако сервер не отправляет обратно соответствующие заголовки, поэтому тело ответа не получается.

См. Также:

Ответы [ 2 ]

2 голосов
/ 10 сентября 2010

(отвечая на мой вопрос)

Причина, по которой запрос отклоняется, заключается в том, что Firefox> = 3.5 реализует спецификацию общего доступа к ресурсам (CORS) , которая предоставляет механизм, позволяющий выполнять межсайтовые HTTP-запросы. По умолчанию эти запросы не отправляют никакие учетные данные (файлы cookie HTTP и информацию об аутентификации HTTP).

Однако межсайтовый HTTP-запрос не будет успешно получать ресурс, если сервер не предоставит соответствующие заголовки CORS (в частности, Access-Control-Allow-Origin) обратно с ресурсом. Ответ будет просто проигнорирован браузером.

Вот пример успешного межсайтового запроса (он возвращает мой профиль на YouTube):

$.ajax({
    url: "http://gdata.youtube.com/feeds/api/users/brucevdk?v=2&alt=json",
    dataType: "json",
    success: function(response) {
        alert(response)
    }
})

Если вы посмотрите на заголовки ответа, вы увидите:

Access-Control-Allow-Origin: *

Что означает «разрешать запросы из любого источника».

Ресурсы

0 голосов
/ 09 сентября 2010

Дополнительные примечания:

* Due to browser security restrictions, most "Ajax" requests are

в соответствии с той же политикой происхождения; запрос не может успешно получить данные из другого домена , поддомен или протокол.

То есть со страницы , которую вы упомянули . Запросы jQuery ajax не поддерживают междоменные запросы из коробки. Хотя есть некоторые обходные пути, которые поиск Google может предоставить ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...