【问题标题】:XMLHttpRequsest failing despite CORS permissions尽管有 CORS 权限,但 XMLHttpRequsest 失败
【发布时间】:2014-05-25 11:44:41
【问题描述】:

所以 - 如果我通过浏览器访问远程服务器上的 URL,example.host.com,我会返回一些 JSON - 太好了。

如果我将完全相同的 URL 放入一些 javascript 中,该 javascript 从本地机器上的服务器提供的页面发出 XMLHttpRequest,我什么也得不到,status=0 和 statusText=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 有一些不明白的地方 - 提前感谢您的任何想法,

【问题讨论】:

    标签: xmlhttprequest cors


    【解决方案1】:

    好的 - 我想通了。问题在于,与非认证请求相比,认证请求更让人头疼。 This MDN page 解释了需要发生的事情。 TL;DR:

    • 如果响应标头没有access-control-allow-credentials: true,浏览器将不会公开凭据请求的响应文本
    • access-control-allow-origin 不能在凭据请求中使用通配符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2019-12-14
      • 2021-02-28
      • 2021-08-12
      • 1970-01-01
      相关资源
      最近更新 更多