每当我尝试在 Mozilla Firefox 浏览器中将特殊字符放入 URL 中时,如下所示
https://网址/|
或者
https://网址/]
Tomcat 正在返回 HTTP 状态 400 – 错误请求和异常堆栈跟踪,如下所示。
Type Exception Report
Message Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
Exception
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:474)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)
Note The full stack trace of the root cause is available in the server logs.
令人惊讶的是,带有特殊字符的相同 URL 在 Google Chrome 浏览器中可以正常工作。
我有以下问题
- 我应该在 tomcat 配置文件中进行哪些更改,以使其不返回 400 状态代码和异常堆栈跟踪?
- 为什么 Mozilla Firefox 无法对 URL 进行编码?
注意:我已经为部署在 tomcat 9 的应用程序中的 4XX 类型的状态代码配置了一个公共页面,但问题是 tomcat 首先返回 400 bad request http 状态代码作为响应。