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

Nie*_*nch 5 jquery google-chrome cross-domain cors

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

Chrome首先进行"OPTIONS"调用以获取标题.如您所见,正确的标题就在那里.

在此输入图像描述

出于某种原因,Chrome不会注意到标头并取消实际请求的方式与标头根本不存在时相同.

在此输入图像描述

该页实际上进行了三次调用并且很奇怪,其中一个是有效的.

在此输入图像描述

所以问题是,当标题确实存在时,为什么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:*
Run Code Online (Sandbox Code Playgroud)

结果是一样的.

在服务器端设置标头

我在每个请求上设置服务器端的头文件(在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");
Run Code Online (Sandbox Code Playgroud)

在与Fiddler调查之后

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

回答

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

Nie*_*nch 17

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

  • OPTIONS 调用应该告诉浏览器可以继续进行真正的调用。如果 OPTIONS 调用失败,它最终不会向浏览器授予此权限,这本质上是浏览器向您报告的内容。 (2认同)