CORS - ...不支持 http 方法 'OPTIONS'

Posted

技术标签:

【中文标题】CORS - ...不支持 http 方法 \'OPTIONS\'【英文标题】:CORS - ...does not support http method 'OPTIONS'CORS - ...不支持 http 方法 'OPTIONS' 【发布时间】:2015-12-29 22:42:54 【问题描述】:

当 CORS 被配置(并且看似工作)时,它仍然为 OPTIONS 动词返回 405。

CORS 是通过 Owin NuGet 包 Microsoft.Owin.Cors 配置的,它似乎返回了正确的标头。

当我伪造预检 OPTIONS 请求时,我注意到 Fiddler 中的问题。当我建议我从允许的域调用时,标头会正确返回,如果我建议其他域,它们正确地不存在 - 它可以工作。

但为什么是 405?

HTTP/1.1 405 Method Not Allowed Cache-Control: no-cache Pragma: no-cache Allow: GET,PUT,DELETE Content-Type: application/xml; charset=utf-8 Expires: -1 Server: Microsoft-IIS/8.0 Access-Control-Allow-Origin: @987654321@ X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Thu, 01 Oct 2015 18:59:32 GMT Content-Length: 96

<Error><Message>The requested resource does not support http method 'OPTIONS'.</Message></Error>

注意Access-Control-Allow-Origin 存在,所以我猜浏览器会没事的,还是浏览器会被否定的 405 '推迟'?

【问题讨论】:

【参考方案1】:

我想你可以在 IIS 的配置上检查第一个允许动词的设置。

参考http://www.iis.net/configreference/system.webserver/security/requestfiltering/verbs

web.config 示例 <configuration> <system.webServer> <security> <requestFiltering> <verbs applyToWebDAV="false"> <add verb="PUT" allowed="false" /> </verbs> </requestFiltering> </security> </system.webServer> </configuration>

【讨论】:

【参考方案2】:

在解决另一个问题时,我对整个 Microsoft.Owin.Cors 进行了逆向工程以逐步解决它。

事实证明,如果中间件已经处理了 OPTIONS 请求,那么它应该返回一个 2xx,事实上,有了新的知识,我知道中间件需要在请求中看到什么以确定它是一个 CORS 预检请求,我能够在 Fiddler 中伪造一个并获得 2xx。

因此,如果您收到 405,请仔细检查。

【讨论】:

以上是关于CORS - ...不支持 http 方法 'OPTIONS'的主要内容,如果未能解决你的问题,请参考以下文章

使用 EnableCors 时“请求的资源不支持 http 方法 'OPTIONS'”

Angular $http.delete CORS 错误(预检请求)

CORS

Fusion Tables 不支持 CORS(跨源资源共享)?

如何将 CORS 支持添加到 Wordpress RSS2 提要?

Spring Boot CORS支持