Y at-il une limite de longueur en-tête HTTP pratique?
-
11-09-2019 - |
Question
J'ai une application Web qui ajoute des informations contextuelles aux objets XmlHttpRequest utilisant le setRequestHeader API. J'utilise un nom d'en-tête personnalisé (par exemple X-Foo) et un JSON valeur structurée. Il ne fait pas partie de la chaîne de requête d'URL ou corps POST, car il est des méta-informations sur la requête.
Y at-il une limite de taille pratique à la valeur d'en-tête? Si mon JSON est tronqué, il devient Unparseable. Je suis très préoccupé par les limites dans Apache 2, Tomcat 6 et IIS 7. J'ai fait une recherche Google pour http limite de longueur d'en-tête , mais beaucoup des résultats semblent datés. Il y a des commentaires pertinents dans Quelle peut une chaîne d'agent utilisateur obtenir? mais pas aussi précis que je voudrais.
Edit: Je viens couru à travers cette même question - maximum sur les valeurs d'en-tête http
La solution
Oui, mais les limites sont configurables et dépend 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 Windows authentification intégrée pour plusieurs sites Web. Active mon jeton de sécurité était trop grand quand codé dans l'en-tête. Heureusement, ceux-ci sont configurables. Les paramètres du Registre pour IIS se trouvent à http://support.microsoft.com/kb/820129 . Je crois que les paramètres clés pour changer sont MaxFieldLength (par taille en-tête) et MaxRequestBytes (taille totale de la demande).
Autres conseils
Bien que chaque logiciel serveur web a des limites, il y a une différence s'il y a une limite pour le la ligne de requête HTTP ainsi que les champs en-tête ou pour chaque champ d'en-tête.
Voici un résumé:
Pour conclure: Pour être accepté par tous les serveurs Web ci-dessus, un ligne de demande de demande en plus des champs en-tête ne doit pas dépasser 8190 octets . Ceci est également la limite pour chaque champs d'en-tête (encore moins efficace).
Pour Apache, j'ai trouvé cette Server pour l'article de sécurité Apache qui répertorie 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, large_client_header_buffers directive des contrôles HttpCoreModule ceci:
La ligne d'en-tête le plus long de la demande doit pas être supérieure à la taille d'un tampon, sinon le client l'erreur "demande Bad" (400).
Par défaut, la taille d'une mémoire tampon est égale à la taille de la page, en fonction de la plate-forme ce soit 4K ou 8K
Alors que vous pouvez configurer le serveur, il est peu probable que vous pouvez vraiment configurer le chemin à travers les pare-feu, les équilibreurs de charge et les mandataires. Garder la taille d'en-tête petit problème tient loin.
La limite de longueur d'en-tête par défaut Flash Media Server 4.5 a une très courte qui peut provoquer le serveur à tout simplement pas répondre, en particulier dans les cas où il y a une charge cookie modérée.
Dans le fichier Flash Media Server Adaptor.xml, le
MaxHeaderLineLength
élément détermine la taille de l'en-tête HTTP, le serveur peut gérer. La valeur par défaut pourMaxHeaderLineLength
est de 1024 octets. certains navigateurs envoyer un en-tête plus de 1024 octets. Dans ce scénario, Apache envoie sauvegarder une réponse vide. Pour résoudre ce problème, configurezMaxHeaderLineLength
8192.Remarque:. Par défaut, la limite de taille d'en-tête HTTP Apache est 8 Ko (8190 octets plus un retour chariot)
Mettre cela ici dans le cas où la limite de taille d'en-tête sur les morsures de Flash Media Server quelqu'un d'autre.