16 mai 2011

Longueur maximale des requetes HTTP

Sous Tomcat 5 le paramètre maxHttpHeaderSize permet de préciser la longueur maximale des requêtes HTTP (en octets). Ceci correspond aux informations que le client envoie au serveur lors de ses demandes d'accès. La plus grosse partie du header est en général liée à la méthode HTTP (GET, POST, HEAD, etc.), l'URI (le chemin à l'objet), le numéro de version du protocole HTTP.

Sa valeur par défaut est de 4096 (4 Ko). Dans l'exemple ci dessous sa valeur est positionnée à 8192 (8 Ko) :

    <!- - Define a non-SSL HTTP/1.1 Connector on port 52281 -->
    <Connector port="52281" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="52283" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />

Sur ses environnements paramétrés avec du "Single Sign On", un collègue Michel a dû monter le maxHttpHeaderSize jusqu'à "65536" (la requête véhiculant des données d’authentification de l'utilisateur).

Avec un Apache en frontal, Michel m'indique qu'il ne faut plus utiliser ce maxHttpHeaderSize (paramètre d'un connecteur HTTP inutilisé) mais le packetsize du connecteur AJP13 et  les paramètres proxyIOBufferSize et LimitRequestFieldsize de Apache :
  • au niveau du connecteur AJP mettre 
packetSize = '65536'
  • dans le fichier de configuration de Apache préciser :
proxyIOBufferSize 65536
LimitRequestFieldsize 65536


  • le HEADER est envoyé en un seul packet , donc il faut que la taille maximale d'un paquet soit suffisant, d'où les paramétres packetSize & proxyIOBufferSize, qui sont par défaut à 8Ko  seulement,
  • le paramétre LimitRequestFieldSize permet d'augmenter la taille maximale des HEADER acceptés par Apache , qui est à 8Ko seulement.
NB : Dans les anciennes versions du serveur Apache (avant 2.0.53 semble-t-il), le paramètre LimitRequestFieldSize ne permettait  pas d'augmenter la valeur par défaut , mais seulement de la limiter. Maintenant c'est possible. Noter que les commentaires dans les docs livrés avec Apache sont erronées sur ce sujet . Une discussion de développeurs de Apache fait allusion à cela.

Aucun commentaire:

Enregistrer un commentaire