【问题标题】:The valid characters are defined in RFC 7230 and RFC 3986有效字符在 RFC 7230 和 RFC 3986 中定义
【发布时间】:2019-06-14 17:20:10
【问题描述】:

我的程序在网上抛出这个异常,我知道是什么原因出错了。 我的问题是如何找到错误的位置,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)

【问题讨论】:

标签: java tomcat8


【解决方案1】:

我在 AJAX GET 请求中发送文件位置时遇到了同样的错误。

因为该位置有无法识别的字符。 IE。 "C:///" 等,报错。

encodeURIComponent 的使用帮助我解决了这个问题,因为它对组件进行了编码。

当您传递位置时,请确保将它们添加到“encodeURIComponent”方法中。就我而言:

 $.ajax({
        type: "GET",
        url: 'removeFile?removeFilePath=' + encodeURIComponent("C:///YO/Ed/PO/")
        data: {},
        dataType: 'json',

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 应该是relaxedQueryChars='[]|{}^`"&lt;&gt;'
    • 9.x.x 版本中不允许使用尖括号
    【解决方案3】:

    如果您使用更高版本的 Tomcat 8.5,如果 URL 路径包含“[”和“]”,则会引发此异常。对于旧版本,它可以工作。

    【讨论】:

    • 是的,出现此错误是因为路径中的参数有特殊字符。所以,我们应该在传递参数之前对您的参数进行“编码 URL”。或者将 GET 替换为 POST 方法。
    【解决方案4】:

    错误消息显示“在请求目标中发现无效字符”。这意味着 HTTP 客户端发送了一个对其中包含无效字符的资源的请求。服务器无法解析请求,因为请求不符合 HTTP 协议规范。

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

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

    【讨论】:

    • 问题是线上服务器抛出异常,我本地测试没有这个问题
    猜你喜欢
    • 2019-08-31
    • 2011-10-25
    • 2020-04-26
    • 2011-08-17
    • 2010-10-25
    • 2020-02-23
    • 2012-03-16
    • 2019-09-27
    相关资源
    最近更新 更多