试了好多种方法,貌似还是没有解决问题,不过也学到了点东西,记录下备忘吧。

异常详情:

1、首先看到最多的就是说在server.xml中的Connector中添加maxHttpHeaderSize="8192",像下面这样设置的。

<Connector port="8080" protocol="HTTP/1.1"   maxHttpHeaderSize="8192"    connectionTimeout="20000"   maxThreads="150"  maxSpareThreads="75"   redirectPort="8443" />  

但是我查了tomcat的配置介绍https://tomcat.apache.org/tomcat-8.5-doc/config/http.html ,这个属性默认的就是8192(8KB),我索性给设置成maxHttpHeaderSize="81920"了,不过貌似还是没有解决问题,依然出现同样的异常

不过这两个设置: maxSpareThreads="75"在我启动tomcat的时候会有如下警告,而且我在tomcat的配置文档中并没有找到此属性,所以我感觉还是不要设置的好

10-Sep-2019 11:38:15.659 警告 [main] org.apache.catalina.startup.SetAllPropertiesRule.begin [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxSpareThreads' to '75' did not find a matching property.

关于这个maxHttpHeaderSize的设置,还有个比较厉害的大神,修改源码了,能看懂的可以试试,反正我这个小菜鸟表示有心无力

2、还有种说法说的是设计到不合法字符的原因,Error parsing HTTP request header翻译过来就是请求头错误嘛

以下内容参考:https://www.jianshu.com/p/83735dc80603?spm=a2c6h.13066369.0.0.44c05da9lfSEG7

首先:不推荐降低tomcat版本,这等于掩耳盗铃,绝对得不偿失。
  Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,在http解析时做了严格限制。
  RFC3986文档规定,请求的Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。

解决方案:在在conf/catalina.properties中最后添加2行:

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

不幸的是, requestTargetAllow 只能配置|、{、} 允许这三个字符,对于其他的(例如" < > [ \ ] ^ ` { | } .),在请求时,仍然拦截,如果使用了|{}之外的其他字符那怎么办呢?那就还需要如下配置。

relaxedPathChars="[\]^`{|}" relaxedQueryChars="[\]^`{|}"

不过我在添加这个备注之后,启动里会有如下警告,暂时不知道是何原因,而且我的网址中并没有这些特殊符号,索性就删除了,如果有这些特殊符号的,可以尝试下。

10-Sep-2019 11:38:15.663 警告 [main] org.apache.catalina.startup.SetAllPropertiesRule.begin [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'relaxedPathChars' to '[\]^`{|}' did not find a matching property.
10-Sep-2019 11:38:15.663 警告 [main] org.apache.catalina.startup.SetAllPropertiesRule.begin [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'relaxedQueryChars' to '[\]^`{|}' did not find a matching property.

3、有个神奇的解决方法,说是https的问题,改成http就好了,我本来就用的是http,所以没有尝试此方法,如果有这种情况的话,可以尝试

4、修改连接协议

4.1将HTTP1.1改成org.apache.coyote.http11.Http11NioProtocol,结果启动tomcat的时候出现了一大堆“地址已使用”的错误,不求甚解,头大中

  

  这里学习一点Linux查看端口的知识:Linux 查看端口占用情况可以使用 lsof 和 netstat 命令

  (1)lsof的用法:

  lsof -i:端口号

  (2)netstat用法:

netstat -tunlp | grep 端口号

netstat命令各个参数说明如下:

-a:列出所有网络状态,包括 Socket 程序;
-c秒数:指定每隔几秒刷新一次网络状态;
-n:使用 IP 地址和端口号显示,不使用域名与服务名;
-p:显示 PID 和程序名;
-t:显示使用 TCP 协议端口的连接状况;
-u:显示使用 UDP 协议端口的连接状况;
-I:仅显示监听状态的连接;
-r:显示路由表;
即可显示当前服务器上所有端口及进程服务,于grep结合可查看某个具体端口及服务情况··

(3)杀死进程

kill -9 PID 

4.2 将HTTP1.1改成protocol="org.apache.coyote.http11.Http11Protocol",启动时提示此写法已过时,让采用上一种协议

10-Sep-2019 14:55:12.963 警告 [main] org.apache.coyote.http11.Http11Protocol.<init> The HTTP BIO connector has been removed in Tomcat 8.5.x onwards. The HTTP BIO connector configuration has been automatically switched to use the HTTP NIO connector instead.

5、在你的tomcat的server.xml上,删除一个监听

把标红的注释掉,重启项目(未实验)

6、降低tomcat版本,原因是Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。

tomcat7.0.69的下载链接

2019年9月16日补充: 更换版本之后已将近一周没出此异常。

2019年9月24日补充:一切正常,此方法可行

7、2020年5月补充,今天查资料的时候遇到有人遇到同样的问题,更新一下(未曾尝试,备用)。

参考网址:https://www.cnblogs.com/yanh0606/p/12737789.html

  解决办法:修改conf/catalina.properties文件,最后一行增加tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

  再重启tomcat,就没有再报错了

  问题:还遇到个用 /var/lib/tomcat-7.0-bsp/bin/catalina.sh start; 命令启动的时候报错,Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

    At least one of these environment variable is needed to run this program

  解决办法:在catalina.sh文件的开头添加JAVA_HOME的环境变量后不报错了

  export JAVA_HOME=/var/lib/jdk1.8.0_221

tomcat运行一段时间出“org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header”的更多相关文章

  1. 【生产环境】Tomcat运行一段时间后访问变慢分析历程

    环境运行一天或者几天,网站访问就很卡,手机端app访问页面出现白屏.Tomcat运行一段时间后访问变慢,但是cpu,内存都正常.日志也是发现不了啥.... 问题的原先分析 1.环境配置(cpu,内存, ...

  2. tomcat运行一段时间后报错"Too many open files"

    tomcat运行一段时间后报打开太多文件错误:Too many open files  查看当前进程的文件打开数: lsof -n |awk '{print $2}'|sort|uniq -c |so ...

  3. tomcat报错: Error parsing HTTP request header

    Error parsing HTTP request header 在服务器上面集成项目的时候,tomcat报错,在往上面查找是因为eclipse运行的tomcat和服务器上面的tomcat版本不一致 ...

  4. Tomcat运行一段时间后,自动停止关闭,To prevent a memory leak,Druid 数据库连接自动关闭, the JDBC Driver has been forcibly unregistered.

    1. Tomcat 错误日志 tail -100f tomcat9/logs/catalina.out 21-Sep-2017 23:05:39.301 INFO [Thread-5] org.apa ...

  5. TOMCAT运行一段时间后网页无响应或连不上,TOMCAT无错误日志

    解决方法:修改 tomcat 的 java options 参数1)增加java options参数-Xmn384m-XX:MaxPermSize=128m-XX:+UseConcMarkSweepG ...

  6. Tomcat:Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

    可能原因一: 在本地tomcat启动正常并且访问正常的项目放在服务器上tomcat报以上错误. 本地tomcat为7.0.68,服务器上为7.0.86 错误原因:服务器tomcat版本过高. 解决办法 ...

  7. Get提交数据过大,tomcat报错,信息: Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level

    原因 get提交的数据过大,超过了默认值. 解决办法 get提交配置 设置tomcat的server.xml.找到我们启动的端口,一般是8080,增加maxHttpHeaderSize= " ...

  8. tomcat正常运行一段时间后,突然访问不了项目了

    前言 我将项目部署在tomcat服务器上,本来都是好好的,输入网站地址就能访问:但是第二天一早去就会发现网站访问提示404,文件无法找到:我就很懵了. 排查 1.我是用的是chrome浏览器,所以尝试 ...

  9. 网站运行一段时间后就无法访问,重启Tomcat才能恢复

    网站运行一段时间后就无法访问,重启Tomcat才能恢复出现这种情况,很可能是以下几种情况:1.超过数据库连接池上限2.并发数达到上限3.内存溢出具体还是需要通过打印的日志进行具体分析.解决方法1.如果 ...

随机推荐

  1. 《电子计算机机房设计规范》GB50174-93

    <电子计算机机房设计规范>GB50174-2008 http://gf.1190119.com/article-17886.htm 中华人民共和国国家标准 电子计算机机房设计规范 GB 5 ...

  2. cesharp 完美支持flash

    直接上代码: cefSettings.CefCommandLineArgs.Add("enable-npapi", "1"); //cefSettings.Ce ...

  3. Sublime用正则表达式进行逗号分隔实现列的替换

    eg: ([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*).* 这是取前面10列,后面的不管 ...

  4. jsConfig那些事儿

    jsConfig 是为了解决 vscode 的警告. { "compilerOptions": { "experimentalDecorators": true ...

  5. 二、Spring中的@ComponentScan自动扫描组件

    在以往采用xml配置的方式中,我们通常需要配置<context:component-scan>标签 比如这样: <!-- 包扫描.只要标注了@Controller.@Service. ...

  6. spring跨重定向传递数据

    spring跨重定向传递数据 为何要重定向? 作用之一:防止表单重复提交 如何重定向? // 在控制器方法返回的视图名称中,以redirect:开头的String不是用来查找视图的,而是用来指导浏览器 ...

  7. python实践项目九:操作文件-修改文件名

    描述:多个文件,文件名名包含美国风格的日期( MM-DD-YYYY),需要将它们改名为欧洲风格的日期( DD-MM-YYYY) 代码1:先创建100个文件名为美国风格日期的文件(文件路径为项目当前路径 ...

  8. Java生成菜单树(目录树)的几种方式

    本文介绍两种不同生成多级目录树的方式:1. 递归生成,2.  map+list 集合生成.最下方会附上完整代码. 生成树的基本规则:子节点的par_id等于父节点的id. 1. 实体类 import ...

  9. maven dependency中provided和compile的区别

    重点:这个项目打成war包时,scope=provided的jar包,不会出现在WEB-INFO/lib目录下,而scope=compile的jar包,会放到WEB-INFO/lib目录 scope= ...

  10. Linux05 文件或目录的权限(ls、lsattr、chattr、chmod、chown、chgrp、file)

    一.查看文件或目录的权限:ls -al  文件名/目录名 keshengtao@LAPTOP-F9AFU4OK:~$ ls -al total drwxr-xr-x keshengtao keshen ...