Javascript 选项405(不允许方法)不管服务器发送访问控制允许方法:选项、GET、HEAD、POST

Javascript 选项405(不允许方法)不管服务器发送访问控制允许方法:选项、GET、HEAD、POST,javascript,sencha-touch,cross-domain,cors,jqxhr,Javascript,Sencha Touch,Cross Domain,Cors,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:* 但当发出选项请求时,我得到OPTIONS 405(不允许使用方法)错误 您知

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

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:*
但当发出选项请求时,我得到
OPTIONS 405(不允许使用方法)
错误


您知道问题是什么以及如何解决吗?

您的web服务器/应用程序可能已配置为针对每个HTTP GET谓词和POST谓词请求发送所述响应头。但是您的web服务器是否配置为处理HTTP选项

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

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


//这些选项请求称为飞行前请求——通常浏览器开发工具不会在其网络选项卡中跟踪它们。f

我建议两种解决方案:

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

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

    ...
}
2) 如果您未使用WebAPI,请尝试了解代码的哪一部分触发选项调用的
选项405(不允许使用方法)
错误。在这种情况下,我将检查是否尝试向
Web.config
文件中添加以下有效的

<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>

您需要修改默认选项VerbHandler。如果使用asp classic,则意味着在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>


谢谢您的评论。服务器是iis7。如何配置它来处理选项?听起来是个不错的方向。你能提供一些关于如何处理
HTTP选项
verb的推荐链接吗?@Blaise关于处理选项verb的最短解释在中进行了解释-有关如何在generat中使用web api<2和asp.net mvc的更多详细信息,请检查此项。对于web api 2,请检查最后一条评论,它最终解决了我在webapi 2中遇到的问题:安装包Microsoft.AspNet.webapi.Cors和httpEnableConfig.EnableCors()可能与