【Tomcat】Error parsing HTTP request header的解决方案

最近个人的一个项目,总是不定时浮现Error parsing HTTP request header这样的问题,有以下两种具体报错

  • Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986.
  • Invalid character found in method name. HTTP method names must be tokens

可以先看一下这个报错

o.apache.coyote.http11.Http11Processor:Error parsing HTTP request header
Note: further occurrences of HTTP request 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

目前,可以确定的是,该报错是由于url中有非法字符导致的,解决方法有

  • 请求url中别有奇奇怪怪的字符,老老实实不好吗
  • 使用tomcat7.0.69以前的版本,这些版本不对请求头进行检验
  • 不想降低tomcat版本?那就对特殊字符进行转义,嗯确实有点麻烦

一般这个报错,很容易解决。


再看这个报错

o.apache.coyote.http11.Http11Processor: Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in method name. 
HTTP method names must be tokens

这个问题,网上众说纷纭,一般有以下几个解决方案,需要大家一步一步排除。

1、考虑get请求头过大,而tomcat的header缓存区又过小

那只能调整tomcat的header缓存区,在server.xml中的Connector标签中添加maxHttpHeaderSize="81920",你要是觉得不够大,可以暂时性的改成一个特别大的数值。

如果用的是SpringBoot,则可以在application.properties文件中配置【server.tomcat.max-http-header-size=81920】

观测一段时间后,如果还是出现这个报错,那么尝试下一个解决方案。

2、使用https去请求http协议

建议每次打印出请求的地址和信息,使用拦截器在preHandle中打印出request的信息,看看有没有出现这样的情况。

3、终极绝招

有时候吧,看报错时间,都是在凌晨,这个就很奇怪。

如果自己用的是8080端口,不妨改一个端口吧。改端口这个好像没什么科学依据,但确实能解决一部分人的问题。

 

引用\[1\]:这个问题通常是由于HTTP请求头部过长导致的。可以通过在Tomcat的server.xml文件中添加maxHttpHeaderSize属性来解决这个问题。例如,在Connector元素中添加maxHttpHeaderSize="8192"。这样可以增加HTTP请求头部的大小限制。\[1\] 引用\[2\]:另外,报错信息中还提到了"Invalid character found in the request target"。这意味着请求目标中存在无效字符。根据RFC 7230和RFC 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* [【TomcatError 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 ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SunAlwaysOnline

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

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

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

打赏作者

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

抵扣说明:

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

余额充值