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

标签 tomcat nginx tomcat8

好像是用的大括号{}有问题。 我尝试通过添加 relaxedPathChars='{ | 更改 server.xml 中的连接器}' relaxedQueryChars='{ | }' 但没有解决问题。还向同一连接器添加了 URIEncoding="UTF-8"useBodyEncodingForURI="true"

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

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

最佳答案

较新版本的 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 中使用连接器的 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)

关于tomcat 8在处理get请求时抛出400错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52502686/

相关文章:

java - 404错误的解决方法 使用带有json的restful web services

wordpress - Nginx禁止在WordPress索引上使用403,其余页面工作正常

python - 用 uwsgi 替换 nginx

java - RESTful Jersey 请求的资源不可用

java - spring mvc 的 Curl POST 请求给出 405 方法 'POST' 不支持

java - 无法使用 java jdbc 驱动程序连接到 Mysql

java - Java中的AES解密花费的时间太长

使用tomcat启动spring boot应用程序时出现java.lang.VerifyError

spring-mvc - WAR 文件不会在 Tomcat 7 上启动

node.js - 为什么我的 Nginx 反向代理 node.js+express 服务器重定向到 0.0.0.0?