有效字符在 RFC 7230 和 RFC 3986 中定义

2022-09-01 22:51:22

我的程序在网上抛出这个异常,我知道它出错的原因。我的问题是怎么找错地方,Java无法捕捉到这个异常的位置。如何获取有关此异常的其他信息,例如此错误请求地址的 API。

错误消息如下所示:

2019-01-18  07:49:23.076 [http-nio-127.0.0.1-8081-exec-96] INFO  org.apache.coyote.http11.Http11Processor - Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:484)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

答案 1

如果您使用 Tomcat 8.5 的上层版本,如果 URL 路径包含 “[' 和 ']',则会引发此异常。对于旧版本,它有效。


答案 2

解决方法是将以下属性添加到tomcat文件中的http连接器端口server.xml

relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>"

推荐