Et est-il configurable? Puis-je configurer Tomcat pour qu'une URL avec, disons, 200 Ko de paramètres de requête passe avec succès vers la servlet contenue?
Oui, je sais que l'on devrait 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 .
Vous pouvez modifier l'entrée du connecteur HTTP/1.1 de Tomcat/conf/server.xml et ajouter un maxHttpHeaderSize = "65536" pour passer du maximum par défaut de 8 Ko environ à 64 Ko. J'imagine que vous pourriez augmenter ce nombre aussi haut 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" ... />
La longueur d'une demande HTTP GET n'est pas appliquée par RFC2616 , comme Microsoft le rapporte pour sa page de prise en charge de la longueur maximale IE .
Donc, la longueur GET maximale 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 de ce navigateur.
Dans tous les cas, je suggère de consulter la page Wikypedia concernant les problèmes liés au navigateur sur la chaîne de requête (la partie de la demande apportant des paramètres pour les applications côté serveur, celle qui suit le "?" Éventuellement présente dans une requête.
Bien sûr, Tomcat imposera peut-être aussi une limite, côté serveur. RFC dit:
Les serveurs DOIVENT être capables de gérer l'URI de toute ressource qu'ils servent, et DEVRAIENT être capables de gérer des URI de longueur illimitée s'ils fournissent des formulaires basés sur GET qui pourraient générer de tels URI. Un serveur DEVRAIT retourner le statut 414 (Request-URI Too Long) si un URI est plus long que ce que le serveur peut gérer (voir la section 10.4.15).
vous pouvez donc facilement tester si Tomcat a une limite et découvrir ce que cette limite utilise simplement différentes demandes commençant par une très longue donnant l'erreur et diminuant de moitié. Utilisez ensuite la méthode de bissection pour trouver rapidement la valeur exacte.
Pour le connecteur AJP, vous devez ajuster l'attribut packetSize
:
<Connector port="8009"
protocol="AJP/1.3"
packetSize="65536" />
Vous pouvez modifier la configuration sur le serveur Tomcat (..\Tomcat 6.0\conf\server.xml)
<Port du connecteur = "8983" maxHttpHeaderSize = "100000" protocol = "HTTP/1.1" connectionTimeout = "20000" redirectPort = "8443" />