我的程序在线抛出此异常,我知道它是错误的原因。 我的问题是如何找到错误的位置,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)
答案 0 :(得分:2)
解决方法是将以下属性添加到tomcat server.xml
文件中的http连接器端口
relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>"
答案 1 :(得分:1)
如果使用更高版本的Tomcat 8.5,并且URL路径包含“ [”和“]”,则它将引发此异常。对于较旧的版本,它可以工作。
答案 2 :(得分:1)
在AJAX GET请求中发送文件位置时遇到相同的错误。
由于该位置包含无法识别的字符。即“ C:///”等,引发了错误。
使用encodeURIComponent
可以解决此问题,因为它可以对组件进行编码。
通过位置时,请确保在“ encodeURIComponent
”方法中添加这些位置。就我而言:
$.ajax({
type: "GET",
url: 'removeFile?removeFilePath=' + encodeURIComponent("C:///YO/Ed/PO/")
data: {},
dataType: 'json',
答案 3 :(得分:0)
错误消息显示“在请求目标中找到无效字符”。这意味着HTTP客户端发送了对其中包含无效字符的资源的请求。服务器无法解析该请求,因为该请求不符合HTTP协议规范。
这是一个客户问题。修复客户端。
如果它是公共服务器,则可能有人试图通过发送格式错误的请求来闯入(这很常见)。