我已收到此类网址的请求: https://xxx/test/%81
这导致400 Bad Request - Invalid URL
我尝试在web.config中设置:
<httpRuntime requestValidationMode="2.0" relaxedUrlToFileSystemMapping="true" requestPathInvalidCharacters=""/>
但它没有帮助。
我还尝试使用自定义请求验证器:
<httpRuntime requestValidationType="MyNamespace.CustomRequestValidation"/>
但是IIS在使用自定义验证器之前返回400。
我还能做些什么来让IIS接受这个URL?
谢谢。
答案 0 :(得分:2)
根据 https://www.iis.net/learn/troubleshoot/diagnosing-http-errors/troubleshooting-http-400-errors-in-iis HTTP 400的根本问题是客户端向IIS发送了一个请求,该请求违反了 HTTP.sys 正在执行的一个或多个规则。
Windows的Http.sys注册表设置如下: https://support.microsoft.com/en-us/kb/820129
因此,在我的情况下,通过在HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ HTTP \ Parameters下创建以下DWORD值作为IIS机器来解决问题:
AllowRestrictedChars = 1
EnableNonUTF8 = 1
将这些更改应用于注册表后,必须重新启动IIS计算机