My:Invalid character found in the request target. The valid characters are defined in RFC 7230 and R

博客讲述了在使用Tomcat 8.5时遇到的一个问题,即HTTP请求的目标中包含了无效字符'|',导致HTTP状态400 - 错误请求。这个问题源于RFC 7230和RFC 3986定义的有效字符限制。错误出现在前端和后端代码中,服务器日志记录了异常。解决方案是使用Tomcat 8.0.30代替Tomcat 8.5。

前端代码报错:

HTTP Status 400 – Bad Request

Type Exception Report

Message Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

Exception

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:483)

org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684)

org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)

org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)

org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

java.lang.Thread.run(Thread.java:748)

Note The full stack trace of the root cause is available in the server logs.

 

Apache Tomca8.5.4

 

后端代码报错:

 

信息: 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:483)

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:808)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:748)

 

浏览器错误显示:

 

解决博客:

Tomcat 8 is not able to handle get request with '|' in query parameters?

https://stackoverflow.com/questions/41053653/tomcat-8-is-not-able-to-handle-get-request-with-in-query-parameters

I am using Tomcat 8. In one case I need to handle external request coming from external source where the request has a parameters where it is separated by |.

翻译:我用的是Tomcat8。在一种情况下,我需要处理来自外部源的外部请求,其中请求有一个参数,该参数用分隔。

Request is looks like this:

http://localhost:8080/app/handleResponse?msg=name|id|

In this case I am getting following error.

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:467)

    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:667)

    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)

    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)

    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:745)

 

 

解决:

EDIT 1

It works with Apache Tomcat 8.0.30 but not with Tomcat 8.5

翻译:它适用于Apache Tomcat 8.0.30,但不适用于Tomcat 8.5。

 

这个是我的bug场景:

错误分析:浏览器里的访问路径里?后的资源带 |,而我的项目用的是tomcat 8.5

现在我换成tomcat 8.0

 

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986是一个Java异常,它表示在请求目标中找到了无效字符。RFC 7230RFC 3986定义了请求目标中允许的有效字符范围。这个异常通常出现在HTTP请求的处理过程中。 出现这个异常的原因可能是由于请求目标中包含了不符合RFC标准的无效字符。可能是由于URL编码错误、特殊字符未正确转义等原因导致的。通常情况下,这个异常会记录在日志中,以帮助开发者定位问题。 解决这个问题的方法是确保请求目标中的字符都是符合RFC 7230RFC 3986定义的有效字符范围。可以使用URL编码对特殊字符进行正确转义,确保请求目标的格式符合标准。另外,还可以检查代码中处理请求目标的部分,确保没有对无效字符进行处理或解析。 综上所述,java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986是一个Java异常,表示在请求目标中找到了无效字符。要解决这个问题,需要确保请求目标中的字符符合RFC标准,并且检查代码中处理请求目标的部分,确保没有对无效字符进行处理或解析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java.lang.IllegalArgumentException: Invalid character found in the request target 异常](https://blog.csdn.net/weixin_46417933/article/details/122409399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [java.lang.IllegalArgumentException: Invalid character found in the request target. The valid charact](https://blog.csdn.net/ab601026460/article/details/85258829)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值