CORS 选项预检悬挂

Posted

技术标签:

【中文标题】CORS 选项预检悬挂【英文标题】:CORS Options Preflight Hanging 【发布时间】:2013-04-12 06:52:00 【问题描述】:

我有一个通过 SSL 托管的 ASP Web API 项目。我有另一个使用 API 的 ASP MVC 项目。在调试时,我看到 OPTIONS 请求经常(但并非总是)挂起并阻止其他调用继续进行的行为。

在 Chrome 调试器中,这些只是显示为“待处理”。如果启动 Fiddler,一切正常。我根本看不到任何错误,事情只是挂起。这在它到达授权码之前就失败了,所以我什至不能设置任何断点。

这可能是证书问题吗?防火墙?

【问题讨论】:

Adam,如果您正在使用此功能,请告诉我:aspnetwebstack.codeplex.com/…? 我没有使用它。我尝试了一些东西,但最终选择了 Thinktecture 中的那个。这些软件包都没有改变我看到的效果。 我的也挂了。Chrome 的选项状态是“待定”。它对我来说时断时续。我还在使用带有子域的 SSL (HTTPS) url。所以我知道预检请求失败了。 我看到 OPTIONS 挂在 firefox 上,有/没有 fiddler,也没有 SSL/TLS。发生在大约 3/4 的请求中。令人沮丧,因为我不知道如何调试它。浏览器似乎已发送请求,但从未命中 CORS 处理程序中的断点。在完整的 IIS 上运行,而不是 IISExpress。 Fiddler 将请求显示为已发送但未响应,所以我猜这排除了浏览器是黑洞。 您是如何获得 SSL 证书的?是自签吗?换句话说,它是否给了您一个警告,并且您在第一次访问该网站时必须手动接受证书?如果是这样,那么这将是您的请求没有通过的问题。尝试使用 HTTP 测试它 【参考方案1】:

您可以试试这个:在 web.config 中添加以下节点。

<system.webServer>
    <handlers>
         <!-- your other handlers -->
         <remove name="OPTIONSVerbHandler" />
    </handlers>
</system.webServer>

【讨论】:

以上是关于CORS 选项预检悬挂的主要内容,如果未能解决你的问题,请参考以下文章

Chrome中的慢速cors预检选项请求[关闭]

避免使用 CORS 预检选项以获得更好的性能

CORS 预检选项请求的 403 错误。怎么修?

Rails 在 CORS 预检选项请求中以 404 响应

由于 CORS 选项预检,ReactJS 无法发送 POST 请求

来自 S3 CORS 的 AJAX GET 在预检选项上失败,出现 403