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

29 篇文章 21 订阅
2 篇文章 1 订阅

最近个人的一个项目,总是不定时浮现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端口,不妨改一个端口吧。改端口这个好像没什么科学依据,但确实能解决一部分人的问题。

 

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SunAlwaysOnline

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

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

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

打赏作者

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

抵扣说明:

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

余额充值