尽管有CORS权限,XMLHttpRequsest仍然失败

时间:2014-05-24 18:06:49

标签: xmlhttprequest cors

所以 - 如果我通过我的浏览器example.host.com访问我的远程服务器上的URL,我会收到一些JSON - 很棒。

如果我将完全相同的URL放入某个javascript中,该javascript会从我本地计算机上的服务器提供的页面中生成XMLHttpRequest,那么我将得到任何内容,status=0statusText=null。相关事实:

  • 远程服务器的响应标头有access-control-allow-origin: '*'
  • 当我创建XMLHttpRequest时,它会将referer: "http://localhost:2154/HV"origin: "http://localhost:2154"添加到其请求标头中。当我将URL放入浏览器时,这些当然不存在。
  • MDN说我上面描述的状态报告通常在请求未发送时发生。
  • 我使用node + express
  • 构建了我的本地服务器
  • 我的XHR代码如下:

    function fetchit(host, n){
        var xmlhttp = new XMLHttpRequest();
    
        xmlhttp.onreadystatechange = function(){
    
            if(this.readyState == 4){
                //do cool stuff
            }
    
        }
        xmlhttp.withCredentials = true;
        xmlhttp.open('GET', 'http://'+host+'/?cmd=getMsg&n='+n);
        xmlhttp.send();
    }
    

我得到的印象是,这与XHR在请求标头上的origin有关,但我认为我在响应标头中提到的行会使origin无关紧要。很明显,我对CORS有一些了解 - 请提前感谢任何想法,

1 个答案:

答案 0 :(得分:0)

好吧 - 我想通了。问题是,与非凭证请求相比,凭证请求在对接中更大的痛苦。 This MDN page解释了需要发生的事情。 TL; DR:

  • 如果响应标题没有access-control-allow-credentials: true
  • ,浏览器不会公开已提交申请的响应文本
  • access-control-allow-origin无法在凭证请求中进行通配。