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