web-dev-qa-db-fra.com

Spring Boot - Erreur lors de l'analyse de l'en-tête de la requête HTTP

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)
4
Misho Janiashvili

Cela peut être dû à l'analyse des en-têtes HTTPS au lieu de HTTP. Essayer:

  1. Ajouter:
    logging.level.org.springframework.web: trace
    logging.level.org.Apache: trace
    à votre application.properties et voyez ce que Spring vous dit. 
  2. Vérifiez si une activité planifiée à ce moment fait référence à une autre ressource chiffrée par SSL. Voir aussi: Java.lang.IllegalArgumentException: caractère non valide trouvé dans le nom de la méthode. Les noms de méthodes HTTP doivent être des jetons
5
coffman21

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 .

0
sigint