使用的花括号{}似乎是一个问题。
我尝试通过添加URIEncoding="UTF-8" useBodyEncodingForURI="true"
来更改server.xml中的连接器,但尚未解决问题。还将rejectResponderTermination
添加到了同一连接器。
我自己无法更改大括号,因为它来自外部脚本,而且我无法事先更改url字符串,因此我试图更改tomcat中的设置以允许{},但到目前为止还没有运气。
这一切都在nginx Web服务器上,如果有帮助的话。
答案 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
,然后再传递请求,否则设计将永远无法执行请求。