web-dev-qa-db-fra.com

JAVA -Tomcat- L'en-tête de demande est trop grand

INFO: Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
Java.lang.IllegalArgumentException: Request header is too large
    at org.Apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.Java:512)
    at org.Apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.Java:501)
    at org.Apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.Java:171)
    at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:996)
    at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:623)
    at org.Apache.Tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.Java:318)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1110)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:603)
    at org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
    at Java.lang.Thread.run(Thread.Java:722

Comment pourrais-je résoudre ce problème dans mon application Web Spring?

J'avais parcouru ce fil L'en-tête de la demande est trop grand

13
Sarthak Srivastava

Résolu! J'utilisais HTTP GET au lieu de HTTP POST. Techniquement, j'ai vu que HttpGet aura un problème si la longueur de l'URL dépasse 2000 caractères. Dans ce cas, il est préférable d'utiliser HttpPost ou de diviser l'URL. Les navigateurs ont des limites allant de 2 Ko à 8 Ko

Tomcat: en-tête de demande trop grand

13
Sarthak Srivastava

voici la question, y a-t-il une limite dans les en-têtes HTTP? La réponse est Non . il n'y a aucune limite mais les serveurs Web limitent la taille de leur en-tête de demande entrante même dans les demandes POST donc nous obtenons 413 (L'en-tête de demande est trop volumineux.) Cette limitation inclut la ligne de demande et les champs d'en-tête.

http://httpd.Apache.org/docs/2.2/mod/core.html#limitrequestfieldsize

https://Tomcat.Apache.org/Tomcat-5.5-doc/config/http.html

http://nginx.org/en/docs/http/ngx_http_core_module.html#large_client_header_buffers

Maximum sur les valeurs d'en-tête http?


Dans mon cas, j'avais SpringBoot 1.5.8 et utilisé HTTP POST, mais j'ai dû ajouter:

server.max-http-header-size=10000000 

dans application.properties.

11
Jay

Je sais que c'est un ancien poste. Cependant, je pense qu'il est bon de clarifier certains éléments.

  • En utilisant le paramètre _server.Tomcat.max-http-header-size = max_wanted_size_, vous modifierez le serveur pour accepter jusqu'à max_wanted_size, mais même si vous le définissez sur 10 Mo, le navigateur réduira votre paramètre de demande à la taille limite du navigateur. J'ai essayé dans chrome et il semble être autour de 150-200kb.
  • Java.lang.IllegalArgumentException se produit dans le serveur et cela n'a rien à voir avec le navigateur. Par conséquent, la modification de la taille de l'en-tête server.Tomcat.max-http devrait être suffisante et cela se produit lors de l'utilisation de la méthode GET, mais cela peut également se produire lors de l'utilisation de la méthode POST (dans la méthode POST case maxPostSize doit être modifié).
6
kimy82

Taille maximale de l'en-tête HTTP de demande et de réponse, spécifiée en octets. S'il n'est pas spécifié, cet attribut est défini sur 4096 (4 Ko).

Pour éviter d'obtenir Error parsing HTTP request header erreur, vous pouvez augmenter la valeur suivante en procédant ainsi.

Accédez à l'emplacement suivant: $Tomcat_HOME/conf/server.xml

Dans server.xml changer la HTTP/1.1 Connector entrée et définissez maxHttpHeaderSize sur "65536" (64 Ko en octets) comme indiqué ci-dessous:

<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />

Ou

Vous pouvez utiliser la méthode POST elle peut transporter jusqu'à 2 mégaoctets selon Tomcat.

La taille maximale en octets de POST qui sera gérée par l'analyse des paramètres d'URL du conteneur FORM. La limite peut être désactivée en définissant cet attribut sur une valeur inférieure ou égale à 0. Sinon spécifié, cet attribut est défini sur 2097152 (2 mégaoctets).

J'espère que ces informations vous aideront ..

3
Dulith De Costa

Il ne s'agit pas de POST ou GET, mais plutôt de la configuration de la limite de taille d'en-tête pour le Tomcat utilisé par votre application.

Vous pouvez toujours contrôler et configurer cela en utilisant les propriétés de l'application comme ci-dessous: server.Tomcat.max-http-header-size = 1024

Où 1024 est en octets.

2
Ashwin Gupta