Y a-t-il une limite pratique à la longueur de L'en-tête HTTP?

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

Est-t-il une limite de taille à la valeur d'en-tête? Si mon JSON soit tronquée, il devient unparseable. Je m'inquiète surtout des limites dans Apache 2, Tomcat 6 et IIS 7. J'ai fait une recherche Google pour limite de longueur d'en-tête http , mais beaucoup des résultats semblent datés. Il y a quelques commentaires pertinents dans quelle taille peut avoir une chaîne d'agent utilisateur? mais pas aussi spécifique que je le voudrais.

Edit: Je viens de croiser cette question similaire - Maximum sur les valeurs d'en-tête http?

67
demandé sur Community 2009-07-08 16:05:56

5 réponses

Oui, mais les limites sont configurables et dépendent de la plate-forme. Par exemple, Tomcat a une limite par défaut de 8K. Je crois que IIS 6, pas sûr de IIS 7, a une limite de 16K. Je suis tombé sur ce lors de l'utilisation de l'authentification intégrée de windows pour plusieurs sites web. Il s'avère que mon jeton de sécurité était trop gros quand il était encodé dans l'en-tête. Heureusement, ils sont configurables. Les paramètres de Registre pour IIS peuvent être trouvés à http://support.microsoft.com/kb/820129 . Je crois que les paramètres clés à modifier sont MaxFieldLength (par taille d'en-tête) et MaxRequestBytes (taille totale de la requête).

47
répondu tvanfosson 2009-07-08 19:07:34

bien que chaque logiciel de serveur web ait certaines limites, il y a une différence entre le fait qu'il y ait une limite pour les champs D'en-tête ligne de requête HTTP plus 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 requête plus les champs d'en-tête)
    • 5.0 : 131072 Octets , 16384 Octets avec Windows 2000 Service Pack 4 (pour la demande en ligne de plus 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 requête plus les champs d'en-tête)
    • 7.0.x : 8190 octets (pour la ligne de requête plus les champs d'en-tête)

pour conclure: être accepté par tous les serveurs Web ci-dessus, une ligne de requête et les champs d'en-tête ne doivent pas dépasser 8190 octets . C'est aussi la limite pour chaque champs d'en-tête (même moins).

53
répondu Gumbo 2011-05-28 08:59:45

pour Apache, j'ai trouvé cet article limites de serveur pour la sécurité Apache qui liste 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, la directive large_client_header_buffers de la directive HttpCoreModule contrôle ceci:

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

Par défaut de la taille d'un tampon est égale à la taille de la page, selon la plate-forme ce soit 4K ou 8K

14
répondu Kevin Hakanson 2011-08-18 04:08:19

alors que vous pouvez configurer le serveur, il est peu probable que vous puissiez vraiment configurer le chemin à travers des pare-feu, des répartiteurs de charge et des mandataires. Garder la taille de l'en-tête petite garde les problèmes loin.

4
répondu Lothar 2014-03-05 08:08:56

le serveur de médias Flash 4.5 a une limite de longueur d'en-tête par défaut très courte qui peut amener le serveur à tout simplement ne pas répondre, en particulier dans les circonstances où il ya une charge de cookie modérée.

voir: Flash Media Server 4.5 Configuration et Administration: Configuration du serveur Configuration du serveur HTTP Apache: spécifiez la longueur maximale de la ligne D'en-tête HTTP 151990920

dans le Adaptateur Flash Media Server.fichier xml, le MaxHeaderLineLength l'élément détermine la taille de L'en-tête HTTP que le serveur peut gérer. La valeur par défaut pour MaxHeaderLineLength est de 1024 octets. Certains navigateurs envoyer un en-tête plus grand que 1024 octets. Dans ce scénario, Apache envoie de retour d'une réponse vide. Pour corriger ce problème, configurer MaxHeaderLineLength à 8192.

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

mettant ceci ici au cas où la limite de taille de l'en-tête sur le serveur de médias Flash mord quelqu'un d'autre.

3
répondu artlung 2012-10-05 14:44:32