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

Était-ce utile?

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é:

  • 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 en plus en-tête champs)
    • 5.0 : 131072 octets , 16384 octets avec Windows 2000 service pack 4 (pour la ligne de demande en plus des champs en-tête)
    • 6.0 : 16384 octets (pour chaque champs d'en-tête)
  • Tomcat:
    • 5.5.x / 6.0.x : 49152 octets (pour la ligne de demande en plus des champs en-tête)
    • 7.0.x : 8190 octets (pour la ligne de demande en plus des champs en-tête)

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.

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

  

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 pour MaxHeaderLineLength 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, configurez   MaxHeaderLineLength 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top