(firefox 9) javascript ajax для внешнего домена, статус 0, но заголовки LiveHTTP фиксируют правильные ответы (!?) - PullRequest
0 голосов
/ 28 января 2012

Я пытаюсь сделать AJAX-вызов на внешний домен.Прочитав немного, я понял, что это невозможно.И я начинал погружаться в решение Proxy, но затем я нашел информацию о «межсайтовом xmlhttprequest с CORS»

Затем я понял, что, возможно, старые браузеры уже реализовали способчтобы сделать это, насколько это позволяет целевой домен, я думаю.

Итак, в этой безвестности я решил проверить захваченные заголовки HTTP.

Это GETПетиция

http://www.genome.jp/dbget-bin/www_bconv?dbkey=uniprot&acc=P11730

Используя любой броузер, я получаю нужную веб-страницу, но через вызов AJAX я получаю статус 0.

Но, с помощью сценария AJAX и использования firefoxдобавив Live HTTP заголовки, я вижу, что все идет хорошо

http://www.genome.jp/dbget-bin/www_bconv?dbkey=uniprot&acc=P62071

GET /dbget-bin/www_bconv?dbkey=uniprot&acc=P62071 HTTP/1.1
Host: www.genome.jp
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Origin: null

HTTP/1.1 302 Found
Date: Sat, 28 Jan 2012 19:24:24 GMT
Server: Apache
Location: /dbget-bin/www_bget?mmu:66922
Content-Length: 0
Keep-Alive: timeout=60, max=1000
Connection: Keep-Alive
Content-Type: text/plain

Итак, есть 2 варианта:

1) он работает, но код имеет некоторыевид ошибки

2) Кажется, это работает, но на самом деле AJAX не может быть сделан для внешнего домена.Почему Live HTTP заголовки захватывают хорошие вещи?потому что цензура делается потом.

Каков ответ?

(код JavaScript)

    <html>
    <head>
    <script type="text/javascript">
    function loadXMLDoc()
    {
    var xmlhttp;
    xmlhttp=new XMLHttpRequest();

    xmlhttp.onreadystatechange=function()
    {
    alert(xmlhttp.readyState+'  '+xmlhttp.status)
    if (xmlhttp.readyState==4)
    {
    alert(xmlhttp.responseText);
    }
    }

    if("withCredentials" in xmlhttp)
    {
    xmlhttp.open("GET","http://www.genome.jp/dbget-bin/www_bconv?dbkey=uniprot&acc=P11730",true);
    xmlhttp.withCredentials = "true";
    xmlhttp.onreadystatechange = handler;
    xmlhttp.send();
    }

    }
    </script>
    </head>
    <body>

РЕДАКТИРОВАТЬ: Таким образом, это похоже на использование CORS дополнительного заголовкадолжен быть включен на веб-сервере.Тогда я предполагаю, что это вариант 2).

Интересные ссылки

Способы обхода политики того же происхождения

http://anyorigin.com/

http://enable -cors.org /

http://remysharp.com/2011/04/21/getting-cors-working/

1 Ответ

1 голос
/ 29 января 2012

Ваши предположения верны.

Вопреки распространенному мнению, запрос XMLHttp на внешний домен всегда можно отправить. Но javascript не предоставляет доступ к документу ответа.

Это связано с Одинаковой политикой происхождения

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

Как вы узнали, если сервер соглашается предоставить доступ путем установки соответствующего заголовка, это ограничение не применяется (при условии, что браузер также поддерживает CORS).

...