Frage Wie hoch ist die maximale URL-Länge in Tomcat?


Und ist es konfigurierbar? Kann ich Tomcat so einrichten, dass eine URL mit etwa 200.000 Abfrageparametern erfolgreich zum enthaltenen Servlet durchläuft?

Ja, ich weiß, dass man POST verwenden sollte, wenn Sie viele Daten haben; das ist in diesem speziellen Fall eine weniger angenehme Option. Die enthaltene Anwendung (eine Suchmaschine) erwartet eine GET-Anfrage, um eine Suche durchzuführen.


42
2017-08-20 15:42


Ursprung




Antworten:


Sie können den HTTP / 1.1-Konnektoreintrag von tomcat / conf / server.xml bearbeiten und eine maxHttpHeaderSize = "65536" hinzufügen, um den Standardwert von maximal 8K auf 64K zu erhöhen. Ich stelle mir vor, dass Sie diese Zahl so hoch wie nötig erhöhen können, aber 64K reichen für meine Bedürfnisse im Moment aus, also habe ich es nicht ausprobiert.

<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />

56
2017-08-24 17:18



Sehr nützlich, löste mein Problem mit Solr. Scheint, wir kratzen an der Standard 8192 Grenze in der server.xml Config, ohne es zu merken, und plötzlich traf es. Painful Gotcha: Nichts wurde darüber protokolliert, die Verbindungen wurden stillschweigend gelöscht (ich erinnere mich nicht mehr an den HTTP-Status). Ich bin über die Dokumentation gestolpert tomcat.apache.org/tomcat-5.5-doc/config/http.html vorher, jedoch habe ich das nicht assoziiert maxHttpHeaderSize durch seinen Namen noch seine Beschreibung, um mit den GET-Anfrage-Abfrage-Parametern selbst zu sein. - mark
Wir haben in Solr auch nur die selbe Grenze erreicht, nichts als eine leere weiße Seite ... :( Die maxHttpHeaderSize hat es geschafft. - user85116
Gleiches hier :) Sehr nützlicher Tipp, danke. - Stefan
Ich denke, die maxHttpHeaderSize = "100000" ist nicht möglich, sollte es in multiplizieren mit 1024. Ich habe die maxHttpHeaderSize = "1048576" geändert, die 1024 * 1024 ist und es immer noch nicht funktioniert.
Eine akzeptierte Antwort "maxHttpHeaderSize =" 65536 " funktioniert nicht Es hat früher wegen gearbeitet Fehler in Tomcat. URL / URI hat nichts mit HTTP-Headern zu tun. - Fuad Efendi


Die Länge einer HTTP-GET-Anfrage wird von RFC2616 nicht erzwungen, wie Microsoft für seine berichtet IE Max Länge Support-Seite.

So, Die maximale GET-Länge ist ein Client- (Browser-) Problem. Wenn Ihre App von Personen verwendet wird, können Sie die Verwendung eines bestimmten Browsers erzwingen. Dann können Sie einfach herausfinden, welche Länge dieser Browser unterstützt.

In jedem Fall schlage ich einen Blick auf die Wikipedie Seite über diese browserbezogenen Probleme in der Query-Zeichenfolge (der Teil der Anfrage, der Parameter für serverseitige Apps mitbringt, der nach dem "?" eventuell in einer Anfrage vorhanden ist.

Natürlich wird Tomcat auch auf der Serverseite ein Limit setzen. RFC sagt:

Server müssen in der Lage sein, den URI zu handhaben   von jeder Ressource, die sie dienen, und sollten   in der Lage sein, URIs ohne Grenzen zu handhaben   Länge, wenn sie GET-basierte Formulare bereitstellen   das könnte solche URIs erzeugen. EIN   Server SOLLTE 414 zurückgeben (Request-URI   Zu lang) Status, wenn ein URI länger ist   als der Server verarbeiten kann (siehe   Abschnitt 10.4.15).

So können Sie ganz einfach testen, ob Tomcat ein Limit hat und herausfinden, was für ein Limit es ist, indem Sie einfach verschiedene Anfragen verwenden, beginnend mit einer sehr langen, die den Fehler gibt und um die Hälfte runter geht. Verwenden Sie dann die Bisektionsmethode, um schnell den genauen Wert zu finden.


5
2017-08-20 15:59



Albert, ich war mir bewusst, dass Tomcat ein Limit out of the box (etwa 8K) hatte; Ich fragte mich, ob es eine Grenze gab, die selbst die Konfiguration nicht überwinden konnte. - Michael Gundlach


Für den AJP-Anschluss müssen Sie die Einstellung anpassen packetSize Attribut:

<Connector port="8009" 
    protocol="AJP/1.3" 
    packetSize="65536" />

2
2018-02-26 12:34



Wenn Sie mod_proxy verwenden, müssen Sie festlegen ProxyIOBufferSize 65536  in deiner httpd Konfiguration auch. - suicide


Sie können die Konfiguration auf dem Tomcat Server ändern (.. \ Tomcat 6.0 \ conf \ server.xml)

<Connector-Port = "8983" maxHttpHeaderSize = "100000" Protokoll = "HTTP / 1.1"                connectionTimeout = "20000"                redirectPort = "8443" />


1
2018-04-08 11:37



Sie können diese Antwort verbessern, indem Sie Ihren Code formatieren und erklären, warum er die OP-Frage beantwortet. - james.garriss