(firefox 9)javascript ajax到外部域,状态为0,但LiveHTTP头捕获正确答案(!?)

(firefox 9)javascript ajax到外部域,状态为0,但LiveHTTP头捕获正确答案(!?),ajax,http-headers,xmlhttprequest,cross-domain,firefox-9,Ajax,Http Headers,Xmlhttprequest,Cross Domain,Firefox 9,我正在尝试对外部域进行AJAX调用。读了一点之后,我意识到这是不可能做到的。我开始深入研究proxys解决方案,但后来我发现了有关“使用CORS跨站点xmlhttprequest”的信息 然后,从这里我了解到,可能非旧浏览器已经实现了一种方法,只要目标域允许,我猜 因此,在这种模糊的情况下,我决定检查被捕获的HTTP头 这是一份请愿书 http://www.genome.jp/dbget-bin/www_bconv?dbkey=uniprot&acc=P11730 使用任何broswe

我正在尝试对外部域进行AJAX调用。读了一点之后,我意识到这是不可能做到的。我开始深入研究proxys解决方案,但后来我发现了有关“使用CORS跨站点xmlhttprequest”的信息

然后,从这里我了解到,可能非旧浏览器已经实现了一种方法,只要目标域允许,我猜

因此,在这种模糊的情况下,我决定检查被捕获的HTTP头

这是一份请愿书

http://www.genome.jp/dbget-bin/www_bconv?dbkey=uniprot&acc=P11730
使用任何broswer,我都可以得到我想要的网页,但是通过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
因此,有两种选择:

1) 它正在工作,但代码有某种错误

2) 它似乎在工作,但实际上AJAX无法在外部域中实现。为什么Live HTTP标头能够捕获好东西?因为审查是事后进行的

答案是什么

(javascript代码)


函数loadXMLDoc()
{
var-xmlhttp;
xmlhttp=新的XMLHttpRequest();
xmlhttp.onreadystatechange=函数()
{
警报(xmlhttp.readyState+''+xmlhttp.status)
if(xmlhttp.readyState==4)
{
警报(xmlhttp.responseText);
}
}
if(xmlhttp中的“带凭据”)
{
open(“GET”http://www.genome.jp/dbget-bin/www_bconv?dbkey=uniprot&acc=P11730“,对);
xmlhttp.withCredentials=“true”;
xmlhttp.onreadystatechange=handler;
xmlhttp.send();
}
}
编辑:因此,使用CORS时,需要在web服务器上启用额外的头。那么我假设它是选项2)

有趣的链接


你的假设是正确的

与流行的观点相反,总是可以向外部域发送XMLHttp请求。但是,javascript不授予对响应文档的访问权

这是由于

同源策略防止从一个源加载的文档或脚本从另一个源获取或设置文档的属性

正如您所发现的,如果服务器同意通过设置相应的头来授予访问权限,则此限制不适用(前提是浏览器也支持CORS)

    <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>