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

时间:2019-01-21 10:26:59

标签: java tomcat8

我的程序在线抛出此异常,我知道它是错误的原因。 我的问题是如何找到错误的位置,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)

4 个答案:

答案 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协议规范。

这是一个客户问题。修复客户端。

如果它是公共服务器,则可能有人试图通过发送格式错误的请求来闯入(这很常见)。