70 votes

Existe-t-il une limite pratique pour la longueur des en-têtes HTTP ?

J'ai une application web qui ajoute des informations contextuelles à XmlHttpRequest en utilisant le setRequestHeader API. J'utilise un nom d'en-tête personnalisé (par ex. X-Foo) et un JSON valeur structurée. Elle ne fait pas partie de l'URL QueryString ou du corps du POST car il s'agit de méta-informations sur la demande.

Existe-t-il une limite de taille pratique pour la valeur de l'en-tête ? Si mon JSON est tronqué, il devient impossible à analyser. Je suis surtout préoccupé par les limites dans Apache 2, Tomcat 6 et IIS 7. J'ai fait une recherche sur Google avec les termes suivants limite de longueur des en-têtes http mais de nombreux résultats semblent datés. Il y a quelques commentaires pertinents dans Quelle taille peut atteindre une chaîne d'agent utilisateur ? mais pas aussi précis que je le voudrais.

Edit : Je viens de tomber sur une question similaire - Maximum sur les valeurs des en-têtes http ?

57voto

Gumbo Points 279147

Bien que chaque logiciel de serveur web ait certaines limites, il y a une différence selon qu'il y a une limite pour le Ligne de requête HTTP plus les champs d'en-tête ou pour chaque champ d'en-tête.

Voici un résumé :

  • Apache 1.3 , 2.0 , 2.2 , 2.3 : 8190 octets (pour chaque champ d'en-tête)
  • IIS :
    • 4.0 : 2097152 octets (pour la ligne de demande et les champs d'en-tête)
    • 5.0 : 131072 octets , 16384 octets avec Windows 2000 Service Pack 4 (pour la ligne de demande et les champs d'en-tête)
    • 6.0 : 16384 octets (pour chaque champ d'en-tête)
  • Tomcat :
    • 5.5.x / 6.0.x : 49152 octets (pour la ligne de demande et les champs d'en-tête)
    • 7.0.x : 8190 octets (pour la ligne de demande et les champs d'en-tête)

Donc, pour conclure : Pour être accepté par tous les serveurs web ci-dessus, un fichier la ligne de demande de la demande plus les champs d'en-tête ne doit pas dépasser 8190 octets . C'est également la limite pour chaque champ d'en-tête (voire même moins).

50voto

tvanfosson Points 268301

Oui, mais les limites sont configurables et dépendent de la plateforme. Par exemple, Tomcat a une limite par défaut de 8K. Je crois que IIS 6, mais je ne suis pas sûr pour IIS 7, a une limite de 16K. J'ai rencontré ce problème lorsque j'ai utilisé l'authentification Windows intégrée pour plusieurs sites Web. Il s'est avéré que mon jeton de sécurité était trop grand lorsqu'il était encodé dans l'en-tête. Heureusement, ces limites sont configurables. Les paramètres du registre pour IIS se trouvent à l'adresse suivante http://support.microsoft.com/kb/820129 . Je pense que les paramètres clés à modifier sont MaxFieldLength (taille de l'en-tête) et MaxRequestBytes (taille totale de la demande).

14voto

Kevin Hakanson Points 15498

Pour Apache, j'ai trouvé ceci Limites du serveur pour la sécurité d'Apache qui énumère ces directives :

  # allow up to 100 headers in a request
  LimitRequestFields 100
  # each header may be up to 8190 bytes long
  LimitRequestFieldsize 8190

Pour Nginx, le grands_tampons_d'en-tête_client de HttpCoreModule le contrôle :

La ligne d'en-tête la plus longue de la demande ne doit pas dépasser la taille d'un tampon, sinon le client reçoit l'erreur "Bad request" (400).

Par défaut, la taille d'un tampon est égale à la taille de la page, selon la plateforme, c'est soit 4K soit 8K.

4voto

Lothar Points 4740

Bien que vous puissiez configurer le serveur, il est peu probable que vous puissiez vraiment le configurer entièrement à travers les pare-feu, les équilibreurs de charge et les proxies. En gardant une taille d'en-tête réduite, on évite les problèmes.

3voto

artlung Points 13433

Le serveur Flash Media 4.5 a une limite de longueur d'en-tête par défaut très courte qui peut faire que le serveur ne réponde tout simplement pas, en particulier dans des circonstances où il y a une charge modérée de cookies.

Voir : Flash Media Server 4.5 Configuration et administration : Configuration du serveur Configuration du serveur HTTP Apache : Spécifier la longueur maximale de la ligne d'en-tête HTTP

Dans le fichier Flash Media Server Adaptor.xml, le champ MaxHeaderLineLength détermine la taille de l'en-tête HTTP que le serveur peut gérer. La valeur par défaut de l'élément MaxHeaderLineLength est de 1024 octets. Certains navigateurs envoient un en-tête plus grand que 1024 octets. Dans ce cas, Apache renvoie une réponse vide. Pour résoudre ce problème, configurez MaxHeaderLineLength à 8192.

Remarque : par défaut, la taille limite des en-têtes HTTP d'Apache est de 8 Ko (8190 octets plus un retour chariot).

Je mets ceci ici au cas où la limite de la taille des en-têtes sur le serveur Flash Media piquerait quelqu'un d'autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X