Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有效字符在RFC 7230和RFC 3986中定义_Java_Tomcat8 - Fatal编程技术网

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

Java 有效字符在RFC 7230和RFC 3986中定义,java,tomcat8,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: furthe

我的程序在线抛出这个异常,我知道它出错的原因。 我的问题是如何找到错误的位置,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)
错误消息显示“在请求目标中找到无效字符”。这意味着HTTP客户端发送的资源请求中包含无效字符。服务器无法分析该请求,因为该请求不符合HTTP协议规范

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


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

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

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

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

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

由于该位置包含无法识别的字符,例如“C://”等,因此引发了错误

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

传递位置时,请确保在“
encodeURIComponent
”方法中添加这些位置。在我的示例中:

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

该类中似乎有调试语句。当启用名为
org.apache.coyote.http11.Http11InputBuffer
的调试记录器时,您应该能够看到出现了什么问题,因为它是联机的,调试模式没有打开。问题是联机服务器引发的异常,我在本地测试中没有此问题是的,t发生此错误是因为路径中的参数具有特殊字符。因此,我们应该在传递参数之前对其进行“encodeURL”。或者用POST方法替换GET。