我有在Windows 2012的IIS 8.0下创建的网站。已在此站点下创建了使用ARR的URL重写,该URL指向linux计算机(基本上指向Tomcat中部署的GET服务),并且通过IIS将出现URL超过5000个字符以及查询字符串的"GET“请求。当通过程序或浏览器访问URL时,我看到IIS抛出"Bad Request“,状态代码为400,没有子状态代码。当它直接访问when服务时也是如此(对于tomcat Linux)。我怀疑这个问题是因为url中的字符过多,因为当我尝试将url长度减少到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长度,还需要做什么具体的配置吗?请提供建议和帮助。提前谢谢。
发布于 2019-06-06 21:58:11
回答我的问题。
问题出在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“的配置。对此进行修改后,问题已解决。
https://stackoverflow.com/questions/56144152
复制相似问题