Chrome没有'Access-Control-Allow-Origin'标题,但标题就在那里

时间:2014-10-01 18:29:59

标签: jquery google-chrome cross-domain cors

这个问题已经在stackoverflow中提到了十几次,但我有一个不同的问题。

Chrome首先制作一个" OPTIONS"打电话来获取标题。如您所见,正确的标题就在那里。

enter image description here

出于某种原因,Chrome没有注意到标题并取消实际请求的方式与标题根本不存在的情况相同。

enter image description here

页面实际上进行了三次调用并且好奇地,其中一个有效。

enter image description here

所以问题是,当标题确实存在时,为什么Chrome不尊重它?我该怎么做才能调试它?

更新

我尝试添加Access-Control-Allow-Methods,所以现在来自OPTIONS调用的标头响应包含这些响应标头:

Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods:POST, GET, OPTIONS
Access-Control-Allow-Origin:*

结果是一样的。

在服务器端设置标题

我在每个请求上设置服务器端的头文件(在Global.asax.cs Application_BeginRequest中)

Response.Headers.Add("Access-Control-Allow-Origin", "*");
Response.Headers.Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
Response.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");

与Fiddler调查后

我查看了原始请求和响应,发现了一些令人惊讶的错误:错误是来自应用程序的简单HTTP 500错误。可能是因为HTTP 500错误不包含正确的标题,Chrome不会显示返回的错误,而是显示与标题相关的错误。

答案

总而言之,如果Chrome提供No 'Access-Control-Allow-Origin' header,它实际上可能会掩盖HTTP 500错误。这可以通过检查Fiddler中的请求和响应来确定。

1 个答案:

答案 0 :(得分:2)

如果Chrome说明No 'Access-Control-Allow-Origin' header,它实际上可能会掩盖HTTP 500错误。这可以通过检查Fiddler中的请求和响应来确定。