升级Tomcat后端报:解析 HTTP 请求 header 错误在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

背景:

最近将旧Tomcat升级为高版本tomcat,前端访问某些功能,后台报错:

org.apache.coyote.http11.AbstractHttp11Processor process
信息: 解析 HTTP 请求 header 错误
 注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别。
java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义
	at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:213)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1108)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:319)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

解决方法:

修改%Tomcat_HOME%/conf/server.xml文件,增加一些配置代码:

原文件节点:

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

修改为:

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               maxpostsize="209715200"
               maxHttpHeaderSize="16384"
               relaxedPathChars="[]|"
               relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
               useBodyEncodingForURI="true"
               URIEncoding="UTF-8" 
               />

最后,重启Tomcat。

引用\[1\]:这个问题通常是由于HTTP请求头部过长导致的。可以通过在Tomcat的server.xml文件添加maxHttpHeaderSize属性来解决这个问题。例如,在Connector元素添加maxHttpHeaderSize="8192"。这样可以增加HTTP请求头部的大小限制。\[1\] 引用\[2\]:另外,错信息还提到了"Invalid character found in the request target"。这意味着请求目标存在无效字符。根据RFC 7230RFC 3986定义请求目标只能包含特定的有效字符。如果请求目标包含了无效字符,就会导致解析错误。\[2\] 引用\[3\]:还有一种可能的错误是"Invalid character found in method name"。这意味着HTTP方法名存在无效字符。根据HTTP协议的规定,HTTP方法名必须是有效的标记。如果方法名包含了无效字符,就会导致解析错误。\[3\] 综上所述,"error parsing http request header"的问题通常是由于HTTP请求头部过长或包含无效字符导致的。可以通过增加maxHttpHeaderSize属性来解决头部过长的问题,并确保请求目标和方法名只包含有效字符。 #### 引用[.reference_title] - *1* [Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors错,已...](https://blog.csdn.net/qq_44893880/article/details/105755299)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【Tomcat】Error parsing HTTP request header的解决方案](https://blog.csdn.net/qq_33591903/article/details/104915079)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值