首先呢,项目共差不多10个接口,测试均不会出现该异常。部署到服务器上,也并未在实际业务操作上 发生异常。
在...服务运行一段时间后,抛出该异常。这是阿里服务会有一个定时的自身检测吗?端口检测?菜鸟渣渣不懂
Springboot2.4.5 + Apache Tomcat/9.0.45 + JDK1.8.0_251
以下是最近几次的日志:
2021-06-05 04:04:19.703 INFO 15135 --- [http-nio-6013-exec-5] 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 [0x030x000x00/*0xe00x000x000x000x000x00Cookie:]. HTTP method names must be tokens
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:417) ~[tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261) ~[tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.45.jar!/:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_251]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_251]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.45.jar!/:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_251]
2021-06-08 09:36:54.676 INFO 8536 --- [http-nio-6013-exec-2] 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 [0x030x000x00/*0xe00x000x000x000x000x00Cookie:]. HTTP method names must be tokens
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:417) ~[tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261) ~[tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.45.jar!/:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_251]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_251]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.45.jar!/:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_251]
2021-06-11 13:54:43.712 INFO 8496 --- [http-nio-6013-exec-10] 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 [l0x000x0b0x000x000x000x000x000x000x000x00...]. HTTP method names must be tokens
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:417) ~[tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261) ~[tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.45.jar!/:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_251]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_251]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.45.jar!/:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_251]
2021-06-11 20:06:43.128 INFO 19046 --- [http-nio-6013-exec-6] 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 [0x160x030x010x020x000x010x000x010xfc0x030x030xf20x990xe20xa40x190xd20xfc0x1b0x80^G0xc50xef0x1d0xb30x830x0b0x070x92meF0x1a_`0xfci0x0f0xc3~0xfd0x95]. HTTP method names must be tokens
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:417) ~[tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261) ~[tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) [tomcat-embed-core-9.0.45.jar!/:na]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.45.jar!/:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_251]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_251]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.45.jar!/:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_251]
查看了对应的异常方法Http11InputBuffer.parseRequestLine,解析请求头 第二行的时候,
if (this.parsingRequestLinePhase == 2) {
问题是这里抛出来的,这是啥呀呀
if (!HttpParser.isToken(this.chr)) {
this.request.protocol().setString("HTTP/1.1");
String invalidMethodValue = this.parseInvalid(this.parsingRequestLineStart, this.byteBuffer);
throw new IllegalArgumentException(sm.getString("iib.invalidmethod", new Object[]{invalidMethodValue}));
}
该部分完整的源代码
if (this.parsingRequestLinePhase == 2) {
space = false;
while(true) {
while(!space) {
if (this.byteBuffer.position() >= this.byteBuffer.limit() && !this.fill(false)) {
return false;
}
pos = this.byteBuffer.position();
this.chr = this.byteBuffer.get();
if (this.chr != 32 && this.chr != 9) {
if (!HttpParser.isToken(this.chr)) {
this.request.protocol().setString("HTTP/1.1");
String invalidMethodValue = this.parseInvalid(this.parsingRequestLineStart, this.byteBuffer);
throw new IllegalArgumentException(sm.getString("iib.invalidmethod", new Object[]{invalidMethodValue}));
}
} else {
space = true;
this.request.method().setBytes(this.byteBuffer.array(), this.parsingRequestLineStart, pos - this.parsingRequestLineStart);
}
}
this.parsingRequestLinePhase = 3;
break;
}
}
Invalid character found in method name [0x160x030x010x020x000x010x000x010xfc0x030x030xf20x990xe20xa40x190xd20xfc0x1b0x80^G0xc50xef0x1d0xb30x830x0b0x070x92meF0x1a_`0xfci0x0f0xc3~0xfd0x95] ,这个咋解析呀
后来按照网络的方式,增加了http-post缓冲区,无效的呀。
server:
port: 6013
tomcat:
# java.lang.IllegalArgumentException: Invalid character found in method name [0x030x000x00/*0xe00x000x000x000x000x00Cookie:]. HTTP method names must be tokens
# 可能解决的方案:设置max-http-form-post-size,默认2MB。
max-http-form-post-size: 10MB
最后:这怎么排查到底是哪个请求出的问题?ww