zoukankan      html  css  js  c++  java
  • IIS下网站对options请求直接返回404

    什么是options请求

    options请求为发送非简单跨域请求前的预检请求,若该请求未正常返回,浏览器会阻止后续的请求发送。
    一般情况下,有三种方式会导致浏览器发起预检请求

    1.请求的方法不是GET/HEAD/POST
    2.POST请求的Content-Type并非application/x-www-form-urlencoded, multipart/form-data 或 text/plain
    3.请求中设置了自定义的header字段(如Token)

    浏览器发出请求但直接返回404

    若未对iis进行配置,则会导致options请求被iis直接响应返回,而不会进入到代码中。这也是Global中的Application_BeginRequest无法捕获到options请求的原因。

    1.检查webconfig中的配置,是否移除了对options请求的特殊处理
    可在iis中进行配置:[网站]-[应用程序]-[处理程序映射]

    <system.webServer>
      <handlers>
        <remove name="OPTIONSVerbHandler" />
      </handlers>
    </system.webServer>
    

    2.检查iis服务器是否安装了UrlScan,若安装了请检查AllowVerbs中是否包含了options
    可在iis中查看是否安装了UrlScan [网站]-[ISAPI筛选器] (可以找到UrlScan安装路径)
    image

    UrlScan的配置文件为UrlScan.ini (C:WindowsSystem32inetsrvurlscanUrlScan.ini)
    将OPTIONS从[DenyVerbs]中移除并添加到[AllowVerbs]下

    3.在Global的Application_BeginRequest实践中直接响应options请求

    //允许所有的options请求,直接返回200状态码
    private void Application_BeginRequest(object sender, EventArgs e)
    {
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.StatusCode = 200;
            HttpContext.Current.Response.Headers["Access-Control-Allow-Origin"] = HttpContext.Current.Request.Headers["origin"];
            HttpContext.Current.Response.End();
        }
    }
    

    4.在webconfig中的Allow-Method中添加上options

    <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET" />
            <add name="Access-Control-Allow-Headers" value="x-requested-with,aspxauth" />
            <add name="Access-Control-Allow-Credentials" value="true" />
          </customHeaders>
        </httpProtocol>
    </system.webServer>
    
  • 相关阅读:
    动态规划5-多重背包
    动态规划4-完全背包
    利用dwebsocket在Django中使用Websocket
    Java学习笔记之:Spring MVC 环境搭建
    Struts2 国际化
    Java学习笔记之:Struts2.0 环境搭建
    LoadRunner:VuGen开发脚本步骤(二)
    LoadRunner:VuGen开发脚本步骤(一)
    Java学习笔记之:Java Servlet 过滤器配置
    Java学习笔记之:Java Servlet环境配置
  • 原文地址:https://www.cnblogs.com/cplemom/p/10845434.html
Copyright © 2011-2022 走看看