qq_39454665 2021-06-12 09:52 采纳率: 0%
浏览 2100

Tomcat:HTTP method names must be tokens

首先呢,项目共差不多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 

 

 

 

 

  • 写回答

3条回答 默认 最新

  • SpringBoot中文社区 2021-06-12 20:07
    关注

    这个问题不用去管,其实就是客户端发起的HTTP请求不规范,请求数据没有按照要求编码。服务器没法解析,就给了这个DEBUG信息。你也没法去管,毕竟你没办法控制客户通过TCP往服务器提发送什么数据。

    评论

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大