我试图让跨域请求,我的服务器被配置为发送以下标题:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:x-requested-with, Authorization
Access-Control-Allow-Methods:OPTIONS, GET, HEAD, POST
Access-Control-Allow-Origin:*
但是,当一个OPTION请求时,我得到OPTIONS 405 (Method Not Allowed)
错误。
任何想法是什么问题,如何解决?
我建议2级的解决方案:
1)如果你正在使用的WebAPI 需要实现按照惯例应该像选择方法:
public class XXXController : ApiController
{
// OPTION http-verb handler
public string OptionsXXX()
{
return null; // HTTP 200 response with empty body
}
...
}
2)如果你不使用的WebAPI试图理解你的代码的一部分触发OPTIONS 405 (Method Not Allowed)
错误选项呼叫。 在这种情况下,我会检查,如果尝试添加到Web.config
文件中的这些<customHeaders/>
的作品:
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<!-- CORS temporary solution -->
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Authorization, Accept, X-Requested-With" />
<add name="Access-Control-Allow-Methods" value="OPTIONS, TRACE, GET, HEAD, POST, PUT" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
您的Web服务器/应用程序可以被配置为发送所提到的响应头为每一个HTTP GET动词和动词POST请求。 但你的web服务器配置来处理HTTP OPTIONS动词?
如果您需要更多详细信息,请提供您所使用的网络服务器和应用程序编程技术。
一点背景,浏览器,当你有一些自定义请求头跨域请求发送OPTIONS请求。 该请求实际的请求之前完成。 只有当这个请求回来与你所提到的响应头的浏览器将使实际要求。
//这些选项的请求被称为预检要求 - 一般浏览器开发工具不追踪他们在网络tab.f
你会需要修改默认OPTIONSVerbHandler。 如果使用ASP经典,这将意味着增加以下行到你的Web.config文件:
<handlers>
<remove name="OPTIONSVerbHandler" />
<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="IsapiModule" scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="None" />
</handlers>
文章来源: OPTIONS 405 (Method Not Allowed) regardless server sends Access-Control-Allow-Methods:OPTIONS, GET, HEAD, POST