it-swarm.com.de

Spring Boot - Fehler beim Analysieren des HTTP-Anforderungsheaders

Ich habe SpringBoot Application gerade Server-Logs überprüft und einige Fehler wie diese erhalten. Ich kann nicht verstehen, was die Ursache sein kann, da der Fehler jeden Tag nach 12/24 Stunden auftritt.

Tomcat-Version läuft unter 8.5.11

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

Dies kann passieren, weil HTTPS-Header anstelle von HTTP analysiert werden. Versuchen:

  1. Hinzufügen:
    logging.level.org.springframework.web: trace
    logging.level.org.Apache: trace
    auf Ihre application.properties und sehen, was Spring Ihnen sagt. 
  2. Überprüfen Sie, ob zu diesem Zeitpunkt geplante Aktivitäten vorhanden sind, die sich auf andere durch SSL verschlüsselte Ressourcen beziehen. Siehe auch: Java.lang.IllegalArgumentException: In Methodenname wurde ein ungültiges Zeichen gefunden. HTTP-Methodennamen müssen Token sein
5
coffman21

Ich hatte diesen Fehler in einer Spring Boot 2 (2.0.1.RELEASE) -Anwendung, die so konfiguriert war, dass sie HTTPS an Port 8443 bereitstellt und Port 8080 HTTP-Verkehr an Port 8443 umleitet.

Unter Microsoft Edge funktionierte die Anwendung wie erwartet, wobei http://localhost:8080 zu https://localhost:8443 umgeleitet wurde. Auf Chrome 66 würde dies jedoch nur einmal funktionieren, und Chrome würde sich darüber beschweren, dass "localhost eine ungültige Antwort gesendet hat" (ERR_SSL_PROTOCOL_ERROR).

Das Serverprotokoll sagte: 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

Es stellt sich heraus, dass Chrome localhost zu seiner HSTS-Liste Hinzugefügt hat, da Spring Boot einen Strict-Transport-Security: max-age=31536000 ; includeSubDomains-Header für https: // localhost: 8443 zurücksendet. Dieses Problem trat also im Wesentlichen auf, weil der Client (d. H. Der Browser) versuchte, HTTPS an einen HTTP-Endpunkt zu senden.

Durch Hinzufügen eines .headers().httpStrictTransportSecurity().disable(); in <? extends WebSecurityConfigurerAdapter>.configure wurde das Problem behoben, wie in dieser StackOverflow-Frage angegeben.

0
sigint