【问题标题】:AngularJS $http returns status code 0 from failed CORS requestAngularJS $http 从失败的 CORS 请求返回状态码 0
【发布时间】:2014-10-19 19:10:49
【问题描述】:

好的,我已经找遍了这个。基本上我们使用的是跨域请求的 $http 请求。我们的服务器允许域,当请求返回 200 时,一切正常。但是,无论何时我们的服务器返回一个错误,500、401 等等,Angular 都会认为这是一个 CORS 问题。

我使用 Fiddler 调试了响应以验证我的服务器正在返回 500,但 Angular 会阻塞它。

这是请求:

       var params = {
            url: "fakehost/example",
            method: 'GET',
            headers: {
                "Authorization": "Basic encodedAuthExample"
            }
        };

       $http(params).then(
            function (response) { // success 

            },
            function (error) { // error 
                 // error.status is always 0, never includes data error msg
            });

然后在控制台中,我会看到这个:

XMLHttpRequest 无法加载 fakehost/example。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'mylocalhost:5750' 不允许访问。

然而,在提琴手中,真正的反应是:

HTTP/1.1 500 Internal Server Error
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 26 Aug 2014 12:18:17 GMT
Content-Length: 5683

{"errorId":null,"errorMessage":"Index was outside the bounds of the array.","errorDescription":"Stack trace here"}

我正在使用 AngularJS v1.2.16

【问题讨论】:

  • 确认一下,error.data 属性未定义?
  • 不是未定义,而是responseError拦截器中的整个响应是:Object {data: "", status: 0, headers: function, config: Object, statusText: ""}
  • 另外,如果我故意发送失败的授权,状态码和数据会正确返回,所以它必须是 500 错误和 CORS 请求的组合:{data: Object, status: 401,标头:函数,配置:对象,状态文本:“未授权”}

标签: javascript angularjs xmlhttprequest cors


【解决方案1】:

我想我找到了答案,看来您必须在您的 asp.net 管道中注入正确的 CORS 标头,如 here 所述。

【讨论】:

  • 啊,你是男/女。这让我记忆犹新,我想我们立即实现了它,但它丢失了。非常感谢。
  • 我在使用 OAuth 时也来到了这里。我以为我与 CORS 无关,但是当用户注销并且我的带有 JS 的页面仍然从浏览器缓存中提供时,它是第一个收到 302 的 XHR。我打算处理它,但结果是Angular 跟随它进入 OAuth 提供者的登录页面,这变成了一个跨站点请求(理所当然地被禁止),并且在错误处理程序中的 status = 0 让我感到惊讶。
  • @acg 我无法控制服务器代码来更改响应标头。在这种情况下,有什么方法可以让角度了解真实状态代码
  • 我在这方面发布了一个新问题stackoverflow.com/questions/31312703/…
猜你喜欢
  • 2015-01-12
  • 2018-05-04
  • 2015-09-27
  • 2020-07-18
  • 2021-04-09
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多