【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端口,不妨改一个端口吧。改端口这个好像没什么科学依据,但确实能解决一部分人的问题。

发布了177 篇原创文章 · 获赞 583 · 访问量 115万+

猜你喜欢

转载自blog.csdn.net/qq_33591903/article/details/104915079