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 错误(预检请求)
Fusion Tables 不支持 CORS(跨源资源共享)?