我在Windows 2012中的IIS 8.0下创建了网站。在该网站下创建了用ARR重写的URL,该URL指向linux计算机(基本上指向Tomcat中部署的Web服务),并且通过IIS会有“ GET”请求,其中该网址以及查询字符串超过5000个字符。通过程序或浏览器访问URL时,我看到IIS抛出“错误请求”,状态代码为400,没有子状态代码。直接将其击中Web服务时(适用于tomcat Linux),该方法同样有效。我怀疑该问题是由于网址中的多余字符所致,因为当我尝试将网址长度减少到3500个字符时,这没有任何错误。以下是我在IIS web.config和http.sys注册表中尝试过的配置和设置,但似乎没有任何作用。
<configuration>
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true">
<requestLimits maxAllowedContentLength="4294967295" maxUrl="10999" maxQueryString="2097151">
<headerLimits>
<add header="Content-Type" sizeLimit="100000000" />
</headerLimits>
</requestLimits>
</requestFiltering>
</security>
<urlCompression doDynamicCompression="false" />
</system.webServer>
<system.web>
<httpRuntime maxRequestLength="8192" maxUrlLength="8192" maxQueryStringLength="8192" requestPathInvalidCharacters="" />
</system.web>
</configuration>
http.sys注册表设置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\MaxFieldLength - DWORD - 65534
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\MaxRequestBytes - DWORD - 16777216
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\UrlSegmentMaxCount - DWORD - 16383
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\UrlSegmentMaxLength - DWORD - 32766
完成上述所有设置和配置后,我已重新启动Windows服务器。
IIS会接受这些设置和配置,而无需重写URL。如果我为同一网站尝试其他长度为5000个字符的网址,则其工作不会出现任何错误。仅对于属于URL重写配置的URL才显示。除上述内容外,是否还需要针对ARR中的URL长度进行任何特定的配置?请提出建议和帮助。 预先感谢。
答案 0 :(得分:0)
正在回答我的问题。
问题出在Linux Tomcat而不是IIS上,catalina.out日志如下所示
INFO: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Request header is too large
我在tomcat / conf的server.xml中添加了maxHttpHeaderSize =“ 65536”的配置。修改之后,问题得以解决。