我发现IIS7,7.5和8(可能还有以前的版本)在遇到任何包含不属于查询字符串的%09
的URL时会快速失败。
StackOverflow本身表现出相同的行为,观察:
http://www.stackoverflow.com/questions/%09
这对我的应用程序来说很烦人,因为我构建了一个 Web 服务,它应该为每个请求返回text/xml
,即使是无效的请求,其中包含包含错误代码的特定 XML 文档格式。我发现一些 Web 服务客户端将%09
(通常是由用户复制和粘贴引起的)传递给我的服务,但我的服务器返回了一个丑陋的 HTML 响应,该响应似乎硬编码为 HTTP.SYS(我在 IIS 中覆盖了 HTTP 400 错误响应,但它没有效果)。
错误请求 - 无效的 URL
HTTP 错误 400。请求 URL 无效。
是否有任何解决方法或解决方案?
备忘录:
为了比较:
- 谷歌正确地提供HTTP 404:https://www.google.com/%09
- Apache似乎让MediaWiki处理了这个错误:http://en.wikipedia.org/wiki/Foo%09
- IIS 不:http://microsoft.com/download/%09
我发现了另一个问题,它指向了Windows文档的Http.sys注册表设置和HKEY_LOCAL_MACHINESystemCurrentControlSetServicesHTTPParameters
中的AllowRestrictedChars
注册表项。我已经确认将其设置为 1
允许请求通过 HTTP.SYS而不会立即被拒绝。然后,IIS 发回自己的 400 页,但至少它会到达 IIS 并出现在 IIS 日志中。此时,可以进一步处理应用自定义错误页面等的请求。