SpringBoot - 解析HTTP请求标头时出错

时间:2018-03-14 09:23:59

标签: java spring spring-boot

我正在运行SpringBoot Application只检查了服务器日志并得到了这样的几个错误。我无法理解导致它的原因,因为每天12/24小时后会出现错误。

8.5.11

上运行的Tomcat版本
2018-03-04 17:03:26 [http-nio-8080-exec-85] INFO  o.a.coyote.http11.Http11Processor - 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.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:421)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:667)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1434)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

4 个答案:

答案 0 :(得分:5)

这可能是因为解析HTTPS标头而不是HTTP。尝试:

  1. 添加:
    logging.level.org.springframework.web: trace
    logging.level.org.apache: trace
    到你的application.properties,看看Spring对你说了什么。
  2. 检查当时是否有任何计划活动,这些活动是指SSL加密的其他资源。另见:java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens

答案 1 :(得分:0)

我在Spring Boot 2(2.0.1.RELEASE)应用程序中遇到此错误,该应用程序配置为在端口8443上提供HTTPS并将端口8080 HTTP流量重定向到端口8443。

在Microsoft Edge上,应用程序按预期工作,http://localhost:8080重定向到https://localhost:8443。然而,在Chrome 66上,这只会工作一次,然后Chrome会抱怨" localhost发送的回复无效" (ERR_SSL_PROTOCOL_ERROR)。

服务器日志说: DEBUG 11440 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer: Received [ <<unprintable characters>> ] INFO 11440 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor: Error parsing HTTP request header

事实证明Chrome正在向其HSTS list添加localhost 因为Spring Boot发回了Strict-Transport-Security: max-age=31536000 ; includeSubDomains标题 https://localhost:8443。基本上,这个问题的发生是因为客户端(即浏览器)试图将HTTPS说到HTTP端点。

添加.headers().httpStrictTransportSecurity().disable(); <? extends WebSecurityConfigurerAdapter>.configure修正了问题,如this StackOverflow question中所述。

答案 2 :(得分:0)

正如我在this similar question中回答的那样,请检查您是否不是意外地请求使用HTTPS协议而不是HTTP协议。如果您未在Tomcat上配置SSL并发送HTTPS请求,则会导致此奇怪消息。

答案 3 :(得分:0)

告诉您使用Firefox而不是chrome时解决的问题。