六月 18, 2019 11:37:19 下午 org.apache.coyote.http11.AbstractHttp11Processor process
信息: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
at org.apache.coyote.http11.InternalAprInputBuffer.parseRequestLine(InternalAprInputBuffer.java:186)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1050)
at org.apache.coyote.AbstractProtocol
A
b
s
t
r
a
c
t
C
o
n
n
e
c
t
i
o
n
H
a
n
d
l
e
r
.
p
r
o
c
e
s
s
(
A
b
s
t
r
a
c
t
P
r
o
t
o
c
o
l
.
j
a
v
a
:
637
)
a
t
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
n
e
t
.
A
p
r
E
n
d
p
o
i
n
t
AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.AprEndpoint
AbstractConnectionHandler.process(AbstractProtocol.java:637)atorg.apache.tomcat.util.net.AprEndpointSocketProcessor.doRun(AprEndpoint.java:2575)
at org.apache.tomcat.util.net.AprEndpoint
S
o
c
k
e
t
P
r
o
c
e
s
s
o
r
.
r
u
n
(
A
p
r
E
n
d
p
o
i
n
t
.
j
a
v
a
:
2564
)
a
t
j
a
v
a
.
u
t
i
l
.
c
o
n
c
u
r
r
e
n
t
.
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
.
r
u
n
W
o
r
k
e
r
(
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
.
j
a
v
a
:
1149
)
a
t
j
a
v
a
.
u
t
i
l
.
c
o
n
c
u
r
r
e
n
t
.
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
SocketProcessor.run(AprEndpoint.java:2564) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor
SocketProcessor.run(AprEndpoint.java:2564)atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)atjava.util.concurrent.ThreadPoolExecutorWorker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
*
背景(jdk1.8/Tomcat7.0),服务器Tomcat运行半天左右时间,就会报这个错。再次请求服务器,Tomcat无响应*
解决办法:
怀疑提交数据超过了定义的header头内容,在tomcat中server.xml的maxHttpHeaderSize设置,maxHttpHeaderSize=“8192”,问题还是没有被解决。
解决办法:
在网上找到资料:json传输的时候包含了{},这就是原因所在。因为tomcat7某个版本之后, 增加了一个新特性,就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。解决方法其实很简单,可以通过修改tomcat的catalina.properties的最后一行改为(这行我的Tomcat7.0.94是#注释的,取消注释添加{})
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
还有常见的三个原因:SSL配置、缓冲区大小(在server.xml中添加maxHttpHeaderSize设置)、Get请求方式改POST,供参考。
尝试以上搜集办法都没有解决问题,最后查看Tomcat的启动内存只有,128/256MB
我使用是是解压版,在Tomcat的bin目录下,catalina.bat,第一行加入set JAVA_OPTS= -Xms4096M -Xmx5129M,(服务器是32G内存),不是解压版的,可能没有catalina.bat,可以再,左边第一张图片添加内存设定(点击Tomcat7w.exe。
已经过去半天时间 ,tomcat还是会报Error parsing HTTP request header 请求头报错问题,但是Tomcat不会未响应挂起。
更新:过去一个星期了,Tomcat正常运行,不会未响应挂起。 请求头报错信息,还没有来得及解决。不影响正常运行。