admin管理员组

文章数量:1608627

【异常】SpringBoot报错 Error parsing HTTP request header Invalid character found in method name 

Invalid character found in method name. HTTP method names must be tokens

原因1: ssl证书到期了

解决方案:续期ssl证书

原因2: Tomcat的header缓冲区大小不够

修改tomcat缓冲区大小

maxHttpHeaderSize

Springboot application.yml

server:
    tomcat:
      uri-encoding: UTF-8
      max-http-header-size: 8192

TOMCAT 配置文件

<Connector URIEncoding="UTF-8" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
	useBodyEncodingForURI="false"
	enableLookups="false"
               connectionTimeout="20000"
               redirectPort="8443" maxHttpHeaderSize="你想要的大小"/>
如:
   <Connector port="8080" executor="tomcatThreadPool"
     protocol="HTTP/1.1"
     maxThreads="1000"
     maxHttpHeaderSize="8192"
     minSpareThreads="100"
     maxSpareThreads="200"
     acceptCount="1000"
     maxConnections="1000"
     connectionTimeout="30000"
     keepAliveTimeout="15000"
     maxKeepAliveRequests="1"
      tcpNoDelay="true"
     redirectPort="8443"
     enableLookups="false"
     URIEncoding="UTF-8"/>

原因3: https换成http

原因4: 请求信息包含非法字符

请求信息里包含了非法字符,我的参数如下:包含了“[]|”非法字符 无效字符

[http-nio-8080-exec-35] INFO  org.apache.coyote.http11.Http11Processor:175 - 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 [2380x00ll|'|'|SGFjS2VkX0Q3NUU2QUFB|'|'|WIN-QZN7FJ7D1O|'|'|Administrator|'|'|18-11-28|'|'||'|'|Win ]. HTTP method names must be tokens
        at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:419)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
        at org.apache.tomcat.util.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1787)
        at org.apache.tomcat.util.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Thread.java:832)

解决办法

1、降低Tomcat版本

2、增加Tomcat配置类:可以插入\"#<>[\\]^`{|}中的任意特殊字符,当然也可以自定义

import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatConfig {

    @Bean
    public TomcatServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((Connector connector) -> {
            connector.setProperty("relaxedPathChars", "\"#<>[\\]^`{|}/");
            connector.setProperty("relaxedQueryChars", "\"#<>[\\]^`{|}/");
        });
        return factory;
    }

}

本文标签: 报错异常ErrorparsingSpringBoot