Quelle est la longueur maximale de l'URL dans Tomcat?

43

Et est-ce configurable? Puis-je configurer Tomcat de sorte qu'une URL contenant, par exemple, 200 Ko de paramètres de requête parvienne à la servlet contenue?

Oui, je sais que vous devriez utiliser POST lorsque vous avez beaucoup de données. c'est une option moins agréable dans ce cas particulier. L'application contenue (un moteur de recherche) attend une requête GET pour effectuer une recherche.

Michael Gundlach
la source

Réponses:

60

Vous pouvez modifier l'entrée du connecteur HTTP / 1.1 de tomcat / conf / server.xml et ajouter maxHttpHeaderSize = "65536" pour passer du nombre maximal par défaut de 8 Ko à environ 64 Ko. J'imagine que vous pouvez augmenter ce nombre autant que nécessaire, mais 64 Ko suffisent à mes besoins pour le moment, donc je ne l'ai pas essayé.

<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />
Michael Gundlach
la source
3
Très utile, résolu mon problème avec Solr. On dirait que nous étions en train de gratter la limite par défaut de 8192 dans la server.xmlconfig, sans nous en rendre compte, et que nous l'avons soudainement atteinte. Douloureux piège: rien n’a été consigné à ce sujet, les connexions ont été silencieusement abandonnées (je ne me souviens plus du statut HTTP). Je suis tombé par hasard sur la documentation de tomcat.apache.org/tomcat-5.5-doc/config/http.html auparavant, mais je n'ai pas associé le maxHttpHeaderSizenom ni la description de celui-ci aux paramètres de requête de la requête GET.
marque
Nous venons tout juste d'atteindre la même limite dans Solr, rien qu'une page blanche vierge ... :( Le maxHttpHeaderSize a fait l'affaire.
user85116
Je pense que le maxHttpHeaderSize = "100000" n'est pas possible, il devrait être multiplié par 1024. J'ai changé le maxHttpHeaderSize = "1048576" qui correspond à 1024 * 1024 et il ne fonctionne toujours pas.
3
Une réponse acceptée, "maxHttpHeaderSize =" 65536 " ne fonctionne pas. Cela fonctionnait auparavant en raison d'un bogue dans Tomcat. L'URL / l'URI n'a rien à voir avec les en-têtes HTTP.
Fuad Efendi
1
@ FuEfendi, quelle est la taille maximale maintenant?
mjaggard
5

La longueur d'une requête HTTP GET n'est pas imposée par RFC2616 , comme Microsoft l'indique pour sa page de support de longueur maximale IE .

Ainsi, la longueur maximale de GET est un problème lié au client (navigateur) . Si votre application est utilisée par des personnes que vous pouvez forcer à utiliser un navigateur donné, vous pouvez simplement trouver quelle est la longueur prise en charge par ce navigateur.

Dans tous les cas, je suggère de consulter la page Wikypedia à propos des problèmes liés au navigateur de la chaîne de requête (la partie de la requête contenant les paramètres des applications côté serveur, celle qui suit le "?" Éventuellement présente dans une requête.

Bien sûr, peut-être que tomcat mettra également une limite, côté serveur. RFC dit:

Les serveurs DOIVENT être en mesure de gérer l'URI de toute ressource qu'ils servent et DEVRAIENT être en mesure de gérer des URI de longueur illimitée s'ils fournissent des formulaires basés sur GET pouvant générer de tels URI. Un serveur DEVRAIT renvoyer l'état 414 (Request-URI Too Long) si un URI est plus long que le serveur ne peut gérer (voir la section 10.4.15).

vous pouvez donc facilement tester si Tomcat a une limite et déterminer ce qu’elle est simplement en utilisant différentes requêtes, en commençant par une très longue requête donnant l’erreur et diminuant de moitié. Ensuite, utilisez la méthode de bissection pour trouver rapidement la valeur exacte.

drAlberT
la source
Albert, je savais que Tomcat avait une limite hors de la boîte (quelque chose comme 8K); Je me suis demandé s'il y avait une limite que même la configuration ne pourrait pas dépasser.
Michael Gundlach
2

Pour le connecteur AJP, vous devez ajuster l' packetSizeattribut:

<Connector port="8009" 
    protocol="AJP/1.3" 
    packetSize="65536" />
1615903
la source
1
Si vous utilisez mod_proxy, vous devez également définir ProxyIOBufferSize 65536 votre configuration httpd.
suicide le
1

Vous pouvez modifier la configuration sur le serveur Tomcat (.. \ Tomcat 6.0 \ conf \ server.xml).

<Port du connecteur = "8983" maxHttpHeaderSize = "100000" protocole = "HTTP / 1.1" connectionTimeout = "20000" redirectPort = "8443" />

Thalaiselvam
la source
Vous pouvez améliorer cette réponse en formatant votre code et en expliquant pourquoi il répond à la question OP.
james.garriss