当前位置: 移动技术网 > IT编程>开发语言>.net > IIS下网站对options请求直接返回404

IIS下网站对options请求直接返回404

2019年05月11日  | 移动技术网IT编程  | 我要评论

湖南卫视变形记,爱神奔驰主题曲,红旗颂伴奏下载

什么是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:\windows\system32\inetsrv\urlscan\urlscan.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>

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网