Je suis en train d'exécuter SpringBoot Application
vient de vérifier les journaux du serveur et j'ai plusieurs erreurs comme celle-ci. Je ne peux pas comprendre ce qui peut le causer car l'erreur apparaît tous les jours après 12/24 heures.
Version Tomcat s'exécutant sur 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)
Cela peut être dû à l'analyse des en-têtes HTTPS au lieu de HTTP. Essayer:
logging.level.org.springframework.web: trace
logging.level.org.Apache: trace
J'ai eu cette erreur dans une application Spring Boot 2 (2.0.1.RELEASE) configurée pour servir HTTPS sur le port 8443 et rediriger le trafic HTTP du port 8080 vers le port 8443.
Sur Microsoft Edge, l'application fonctionnait comme prévu, avec http://localhost:8080
redirigeant vers https://localhost:8443
. Sur Chrome 66, toutefois, cela ne fonctionnerait qu'une fois, puis Chrome se plaindrait que "localhost avait envoyé une réponse invalide" (ERR_SSL_PROTOCOL_ERROR
).
Le journal du serveur disait:
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
Il s'avère que Chrome ajoutait localhost
à sa liste HSTS Car Spring Boot a renvoyé un en-tête Strict-Transport-Security: max-age=31536000 ; includeSubDomains
pour https: // localhost: 8443 . Donc, ce problème est essentiellement dû au fait que le client (navigateur) essayait de parler HTTPS à un point de terminaison HTTP.
L'ajout d'une .headers().httpStrictTransportSecurity().disable();
dans <? extends WebSecurityConfigurerAdapter>.configure
a corrigé le problème, comme indiqué dans cette question de StackOverflow .