Tomcat 8.5 400错误:Invalid character found in the request target. 问题解决方法

最近部署项目的时候,由于MIS配置的是Tomcat 8.5的服务端,导致Web应用不正常,报HTTP 400错误(Chrome无异常、IE报错)。问题原因初步判断为8.5版本的服务端接收请求不会对符号进行转义,Chrome不异常的原因或许是浏览器自身转义了。具体错误信息如下:


 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:472)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:683)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
        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)

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

查阅了大量资料后,有两种解决方案:

Plan 1:
更换低版本的Tomcat来规避这种问题。

Plan 2:
在conf/catalina.properties中最后添加一行:

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

重启服务器后,解决问题。

官方指南地址:http://tomcat.apache.org/tomcat-8.5-doc/config/systemprops.html

官方说明:

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH

If this is true ‘%2F’ and ‘%5C’ will be permitted as path.delimiters.If not specified, the default value of false will be used.

  • 41
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
### 回答1: Tomcat在处理请求目标时发现了无效字符。有效的字符包括字母、数字和一些特殊符号。一旦请求中包含了无效字符,Tomcat将无法正确解析请求,导致出现错误。 无效字符是指那些不被HTTP协议允许出现在请求目标中的字符。例如,某些特殊符号和非ASCII字符可能被认为是无效字符。其中一个被提到的无效字符是“a”。 如果碰到这个错误,您可以考虑以下解决方案: 1. 检查请求目标中是否存在无效字符。可以使用ASCII字符集中允许的字母、数字和一些特殊符号,如连字符或斜杠。 2. 检查请求目标中是否存在非ASCII字符。如果存在,可以尝试将其转换为相应的ASCII字符或使用URL编码来处理。 3. 检查URL中是否存在空格或其他不允许的字符。如有需要,可以使用URL编码来替换这些字符。 4. 检查请求目标中是否存在其他错误。无效字符错误可能是由其他问题引起的。检查其他相关信息,如请求头和请求体,以寻找可能的错误。 总之,当在Tomcat中遇到“invalid character found in the request target”的错误时,应该仔细检查请求目标中是否包含无效字符,并采取适当的措施来解决问题。 ### 回答2: Tomcat报错"invalid character found in the request target. the valid characters"意思是在请求目标中发现了无效字符,有效字符包括a。 这个错误通常发生在使用Tomcat服务器时,客户端发起了一个带有无效字符的请求。在URL中,请求目标代表要请求的资源的路径。例如,以GET方法请求http://example.com/my-page时,"my-page"就是请求目标。 Tomcat服务器对请求目标中的字符有一些限制。根据HTTP/1.1规范,请求目标只能包含ASCII字符,并且某些字符需要进行转义。如果在请求目标中发现了无效字符,就会出现这个错误。 在错误信息中提到的有效字符"a"指的是ASCII字符中的字母"a"。根据HTTP/1.1规范,字母"a"是允许在请求目标中使用的有效字符之一。 要解决这个错误,可以检查请求中的URL是否包含了无效字符。确保请求目标只包含ASCII字符,并将其中的无效字符进行转义。可以使用URL编码来确保请求目标中的特殊字符正确转义。 例如,如果请求目标中包含了非ASCII字符,可以使用URL编码将其转换为%xx的格式。对于字母"a",由于它是有效字符,所以不需要进行特殊处理。 总之,当在Tomcat服务器中出现"invalid character found in the request target. the valid characters"的错误时,需要检查请求目标中是否包含了无效字符,并对其进行相应的转义处理,确保请求目标只包含ASCII字符。 ### 回答3: Tomcat invalid character found in the request target问题的原因是在请求目标中存在无效字符。在Tomcat中,请求目标是指HTTP请求中URL中的路径部分。根据HTTP协议,请求目标只能包含特定的有效字符。 有效字符是指被允许在URL中使用的字符,包括字母(大小写),数字以及一些特殊字符,如连字符(-)、下划线(_)、点号(.)等。 然而,为了确保请求的安全性和可靠性,Tomcat对请求目标进行了严格的检查和验证。如果在URL中的请求目标中发现无效字符,Tomcat会拒绝处理该请求,并返回"invalid character found in the request target"错误。 在这种情况下,解决方法是确保请求目标中只包含有效的字符。你提到的有效字符是字母"a",所以可以查看请求目标中是否包含了其他无效字符。 通常情况下,无效字符可能是由URL编码错误引起的。URL编码是一种将特殊字符转换为URL安全字符的方法。对于包含非ASCII字符的URL,应该使用适当的URL编码方法。 另外,如果你使用的是Web应用程序框架,例如Spring MVC,也可能是在生成URL时出现了编码问题。在此情况下,建议检查URL生成的代码,确保使用了正确的URL编码机制。 总之,要解决Tomcat invalid character found in the request target问题,需要检查并确保请求目标中只包含有效字符,并正确处理URL编码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉陌浮生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值