选项405(方法不允许),无论服务器发送Access-Control-Allow-Methods:OPTIONS,GET,HEAD,POST

Spa*_*hut 10 javascript cross-domain cors sencha-touch jqxhr

我正在尝试进行跨域请求,我的服务器配置为发送以下标头:

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:*
Run Code Online (Sandbox Code Playgroud)

但是当发出OPTION请求时,我会收到OPTIONS 405 (Method Not Allowed)错误.

任何想法是什么问题以及如何解决它?

Fil*_*ale 8

我建议2个解决方案:

1)如果您正在使用WebAPI,则需要实现按惯例应如下所示的选项方法:

public class XXXController : ApiController
{
    // OPTION http-verb handler
    public string OptionsXXX()
    {
        return null; // HTTP 200 response with empty body
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

2)如果您使用WebAPI,请尝试了解代码的哪一部分触发OPTIONS 405 (Method Not Allowed)OPTION调用的错误.在这种情况下,我会检查是否尝试添加到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>
Run Code Online (Sandbox Code Playgroud)


hum*_*ner 6

您的Web服务器/应用程序可能已配置为为每个HTTP GET动词和POST动词请求发送上述响应头.但是您的Web服务器是否配置为处理HTTP OPTIONS动词?

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

有一点背景,当您有一个带有一些自定义请求标头的跨域请求时,浏览器会发送一个OPTIONS请求.此请求在实际请求之前发出.只有当此请求与您提到的响应标头一起返回时,浏览器才会发出实际请求.

//这些OPTIONS请求称为预检请求 - 通常浏览器开发工具不会在其网络tab.f中跟踪它们