OPTIONS 405(不允许的方法),无论服务器发送访问控制允许的方法:OPTIONS,GET,H

2019-08-02 11:39发布

我试图让跨域请求,我的服务器被配置为发送以下标题:

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)错误。

任何想法是什么问题,如何解决?

Answer 1:

我建议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>


Answer 2:

您的Web服务器/应用程序可以被配置为发送所提到的响应头为每一个HTTP GET动词和动词POST请求。 但你的web服务器配置来处理HTTP OPTIONS动词?

如果您需要更多详细信息,请提供您所使用的网络服务器和应用程序编程技术。

一点背景,浏览器,当你有一些自定义请求头跨域请求发送OPTIONS请求。 该请求实际的请求之前完成。 只有当这个请求回来与你所提到的响应头的浏览器将使实际要求。

//这些选项的请求被称为预检要求 - 一般浏览器开发工具不追踪他们在网络tab.f



Answer 3:

你会需要修改默认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