Javascript 在浏览器中剪切CORS标题以获取状态代码>;=400

Javascript 在浏览器中剪切CORS标题以获取状态代码>;=400,javascript,ajax,angularjs,cors,Javascript,Ajax,Angularjs,Cors,我正在对web AngularJS应用程序(1.3版)进行一些更改。对于ajax调用,我使用$http。所有请求都是跨源的,所以我在服务器的所有响应中使用CORS头 我的问题是,在无法解释的原因中,当我在Chrome中监视CORS时,所有CORS头都会被剪切(Firefox也是如此),但我在Fiddler响应中看到了它们。状态代码>=400的请求会发生这种情况。因此,所有状态代码为200的请求在响应中都有CORS头 在《小提琴手》中,我看到: Access-Control-Allow-Heade

我正在对web AngularJS应用程序(1.3版)进行一些更改。对于ajax调用,我使用$http。所有请求都是跨源的,所以我在服务器的所有响应中使用CORS头

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

在《小提琴手》中,我看到:

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头,它也能正常工作,但我现在无法更新Angular库


有人面临同样的问题吗?

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

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

当A向B发送选项请求时,B必须使用所有CORS头和状态代码200进行应答。(200是重要的!)

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


Firefox控制台非常擅长告诉您CORS请求中具体失败了什么,请确保关闭所有不同的过滤器。

我遇到了同样的问题。保存“缓存控制”标题仅设置为“无缓存”。如果设置了“no store”,您可能不会在Chrome控制台中响应>=400的请求。

您使用什么作为HTTP服务器?Apache?尝试了IIS8和node server(),您是如何添加CORS头的?API假设可以控制这个问题。我不知道怎么做,对不起。不管怎样,我试着从我的家用电脑发送同样的请求。那里一切正常。真奇怪。我想有些设置被破坏了。Windows…IIS8应该有自己的400响应,我认为您可以修改它以包含CORS头。在node.js上,您还必须为400响应明确发送这些标题。不管怎样,你为什么需要400个响应代码上的CORS?你知道吗,通过这个解释,你解决了我8个月来遇到的一个问题,是的,我8个月来就遇到了这个问题,我不是在开玩笑。我找不到话来感谢你