在浏览器中剪切CORS标题,状态代码> = 400

时间:2015-08-20 14:59:29

标签: javascript ajax angularjs cors

我在网络AngularJS应用程序(1.3版本)中做了一些更改。对于ajax调用,我使用$ http。所有请求都是跨域的,因此我在服务器的所有响应中使用CORS头。

我的问题是,在无法解释的原因中,当我在Chrome中监视它们时,所有CORS标题都会被删除(对于Firefox也是如此),但我在Fiddler响应中看到它们。对于状态代码> = 400 的请求,会发生这种情况。因此,状态代码为200的所有请求在响应中都有CORS头。

在Fiddler中,我看到了:

Access-Control-Allow-Headers: Origin, Content-Type, Accept, Cache-Control
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS
Access-Control-Allow-Origin: *
Connection: keep-alive

但在浏览器中我看到:

Connection: close

这是因为$ http总是返回0作为状态代码。对于1.4.0 Angular $ http被重写,即使没有CORS头文件也能正常工作,但我现在无法更新角度库。

有人遇到同样的问题吗?

2 个答案:

答案 0 :(得分:1)

在尝试通过启用CORS的连接接收400状态代码时,我发现了一些问题。

从A到B的AJAX POST请求将导致对B的两个请求。首先是使用OPTIONS方法的预检请求。如果预检成功,则会发出POST请求。

当A向B发送OPTIONS请求时.B必须回答所有CORS头和状态码200.(200很重要!)。

当A向B发送POST请求时,B必须再次回答所有CORS标题,这次状态代码对CORS不重要,您可以使用所需的任何拟合状态代码。

Firefox控制台非常善于告诉您CORS请求中特定失败的内容,请确保关闭所有不同的过滤器。

答案 1 :(得分:0)

我遇到了同样的问题。保存“ Cache-Control”标头仅设置为“ no-cache”。如果设置为“ no-store”,那么您可能不会在Chrome的控制台中响应大于等于400的请求。