什么是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安装路径)

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>

最新文章

  1. MIT研发的新型匿名网络Riffle,下一个Tor
  2. 页面引入flash
  3. 论文笔记之:Progressive Neural Network Google DeepMind
  4. JAVA基础学习day21--IO流三-File、Properties、PrintWriter与合并、分割流
  5. Yii cookie 的使用方法
  6. php通过正则从字符串中获取所有图片url地址
  7. 安装Oracle11g时,检测到系统的主 IP 地址是 DHCP 分配的地址
  8. 简单的linux命令笔记
  9. TCP protocol
  10. xcode 3.x版本中的Executables 到xcode 4.x中怎么找不到了?
  11. DOS命令教学之详解批处理
  12. 如何通过友盟分析发布后App崩溃日志-b
  13. 【Git】自动化Maven项目构建脚本(一)
  14. 使用Jquery.js框架和CSS3实现3D相册的制作
  15. 【Flask】 使用Flask-Moment进行日期时间的管理
  16. Chapter 4 Invitations——28
  17. iOS has conflicting provisioning settings 解法
  18. 对于Spring中注入对象失败的问题
  19. charles使用:iOS11的手机用charles抓包https
  20. Mac Terminal open app with a file opened

热门文章

  1. HDU-4249-A Famous Equation(DP)
  2. x:Static&nbsp;,&nbsp;StaticResource&nbsp;和DynamicResource等XAML&nbsp;扩展用法
  3. WPF ListView 居中显示
  4. Emgu-WPF学习使用 - 颜色映射
  5. linq to entity GroupBy多个字段
  6. linux系统的ssh服务开启方法
  7. 【WPF】wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例
  8. nprogress.js 头部进度条使用方法
  9. G1 安装 Linux Debian system
  10. CKEditor 4.5 beta 发布,可视化 HTML 编辑器