tomcat 8处理get请求时抛出400个错误

时间:2018-09-25 16:21:36

标签: tomcat nginx tomcat8

使用的花括号{}似乎是一个问题。 我尝试通过添加URIEncoding="UTF-8" useBodyEncodingForURI="true"来更改server.xml中的连接器,但尚未解决问题。还将rejectResponderTermination添加到了同一连接器。

我自己无法更改大括号,因为它来自外部脚本,而且我无法事先更改url字符串,因此我试图更改tomcat中的设置以允许{},但到目前为止还没有运气。

这一切都在nginx Web服务器上,如果有帮助的话。

2 个答案:

答案 0 :(得分:0)

Tomcat的较新版本试图遵守RFC7230 / RFC3986(限制可以在URL中使用的字符)。但这会导致某些较旧的应用程序出现问题,现在有一种方法可以覆盖这些规则。 (请参见此处的讨论:https://bz.apache.org/bugzilla/show_bug.cgi?id=62273

在最新版本的Tomcat中,此行为有所更改。

在当前版本(8.0.53、8.5.34、9.0.12)中,可以在server.xml中使用Connector的relaxedPathChars和relaxedQueryChars属性:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="60000" 
          relaxedQueryChars='^{}|[]' 
          redirectPort="8443" />

在旧版本中,此行为由现在不推荐使用(!)系统属性tomcat.util.http.parser.HttpParser.requestTargetAllow(https://tomcat.apache.org/tomcat-8.5-doc/config/systemprops.html

设置

请注意,有些Tomcat版本实现了严格的规则,但是还没有此选项。

(我也看到过Tomcat版本,但已打补丁-此行为已更改为解决可能的漏洞-http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6816

答案 1 :(得分:-1)

您不能在URL中使用大括号

RFC1738将它们列出为不安全字符,并说必须始终在URL中编码不安全字符。

您将必须找到一种方法,将{更改为%7B,将}更改为%7D,然后再传递请求,否则设计将永远无法执行请求。