IIS网站下的一些错误解决方案
1、HTTP 错误 405.0 - Method Not Allowed 无法显示您正在查找的页面,因为使用了无效方法(HTTP 谓词)
原因:IIS10 默认支持 PUT 和 DELETE 请求,但 IIS8.0 及以下版本默认不接收 PUT、DELETE 等不常见的 HTTP 谓词
在web.config配置文件中添加配置
</system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="*" /> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE,OPTIONS" /> </customHeaders> </httpProtocol> </system.webServer>
如果做了正确的配置还是不行,这个时候我们可以看到错误信息拉杰提示的模块是WebDAVModule,在配置文件中添加配置移除该模块
<modules> <remove name="WebDAVModule" /> </modules>
2、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安装路径)
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>
3、无法响应此网站,响应时间过长
设置出站、入站规则
出站入站规则在防火墙 里面设置(高级)