Was ist die maximale URL-Länge in Tomcat?


43

Und ist es konfigurierbar? Kann ich Tomcat so einrichten, dass eine URL mit beispielsweise 200 KB Abfrageparametern erfolgreich an das enthaltene Servlet weitergeleitet wird?

Ja, ich weiß, man sollte POST verwenden, wenn Sie viele Daten haben. Das ist in diesem speziellen Fall eine weniger angenehme Option. Die enthaltene Anwendung (eine Suchmaschine) erwartet, dass eine GET-Anforderung eine Suche durchführt.

Antworten:


60

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

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

3
Sehr nützlich, mein Problem mit Solr gelöst. Anscheinend haben wir in der server.xmlKonfiguration das Standardlimit von 8192 durchgearbeitet, ohne es zu bemerken, und es plötzlich erreicht. Schmerzhafte Nachricht: Es wurde nichts darüber protokolliert, die Verbindungen wurden stillschweigend getrennt (ich kann mich nicht mehr an den HTTP-Status erinnern). Ich bin zuvor über die Dokumentation unter tomcat.apache.org/tomcat-5.5-doc/config/http.html gestolpert , habe jedoch weder den maxHttpHeaderSizeNamen noch die Beschreibung mit den Abfrageparametern der GET-Anforderung verknüpft.
Markieren Sie den

Wir haben in Solr auch nur das gleiche Limit erreicht, nichts als eine leere weiße Seite ... :( Die maxHttpHeaderSize hat den Trick gemacht.
user85116

Ich denke, das maxHttpHeaderSize = "100000" ist nicht möglich, es sollte mit 1024 multipliziert werden. Ich habe das maxHttpHeaderSize = "1048576" geändert, das 1024 * 1024 ist und es funktioniert immer noch nicht.

3
Eine akzeptierte Antwort, "maxHttpHeaderSize =" 65536 " funktioniert nicht Es hat vorher wegen eines Fehlers in Tomcat funktioniert . URL / URI hat nichts mit HTTP-Headern zu tun.
Fuad Efendi

1
@FuadEfendi was IST denn jetzt die maximale Größe?
mjaggard

5

Die Länge einer HTTP-GET-Anforderung wird von RFC2616 nicht erzwungen , wie Microsoft für die Unterstützungsseite für die maximale Länge des IE meldet .

So ist die maximale Länge GET ein Client (Browser) verwandtes Problem . Wenn Ihre App von Personen verwendet wird, die Sie zur Verwendung eines bestimmten Browsers zwingen können, können Sie einfach die Länge ermitteln, die dieser Browser unterstützt.

In jedem Fall schlage ich vor, auf der Wikypedia- Seite nachzuschlagen, welche Browserprobleme in der Abfragezeichenfolge auftreten (der Teil der Anforderung, der Parameter für serverseitige Apps enthält, der nach dem "?"

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

Server MÜSSEN in der Lage sein, den URI einer Ressource zu verarbeiten, die sie bedienen, und sollten in der Lage sein, URIs von unbegrenzter Länge zu verarbeiten, wenn sie GET-basierte Formulare bereitstellen, die solche URIs generieren könnten. Ein Server SOLLTE den Status 414 (Request-URI Too Long) zurückgeben, wenn ein URI länger ist als der Server verarbeiten kann (siehe Abschnitt 10.4.15).

Sie können also leicht testen, ob Tomcat ein Limit hat, und herausfinden, was dieses Limit ist, indem Sie einfach verschiedene Anforderungen verwenden, beginnend mit einer sehr langen, die den Fehler ausgibt und um die Hälfte sinkt. Verwenden Sie dann die Bisektionsmethode, um schnell den genauen Wert zu finden.


Albert, mir war bewusst, dass Tomcat ein Limit außerhalb der Box hatte (so etwas wie 8K); Ich habe mich gefragt, ob es eine Grenze gibt, die selbst die Konfiguration nicht überwinden kann.
Michael Gundlach

2

Für den AJP-Connector müssen Sie das packetSizeAttribut anpassen :

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

1
Wenn Sie mod_proxy verwenden, müssen Sie dies auch ProxyIOBufferSize 65536 in Ihrer httpd-Konfiguration festlegen .
Selbstmord

1

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

<Connector port = "8983" maxHttpHeaderSize = "100000" protocol = "HTTP / 1.1" connectionTimeout = "20000" redirectPort = "8443" />


Sie können diese Antwort verbessern, indem Sie Ihren Code formatieren und erklären, warum er die OP-Frage beantwortet.
james.garriss
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.