Vraag Wat is de maximale URL-lengte in Tomcat?


En is het configureerbaar? Kan ik Tomcat zo instellen dat een URL met, zeg, 200K queryparameters met succes doorloopt naar de betreffende servlet?

Ja, ik weet dat je POST moet gebruiken als je veel gegevens hebt; dat is in dit specifieke geval een minder prettige optie. De ingesloten toepassing (een zoekmachine) verwacht dat een GET-verzoek een zoekopdracht uitvoert.


42
2017-08-20 15:42


oorsprong




antwoorden:


U kunt het bestand HTTP / 1.1 Connector van tomcat / conf / server.xml bewerken en een maxHttpHeaderSize = "65536" toevoegen om te verhogen van het standaardmaximum van 8K of zo, naar 64K. Ik kan me voorstellen dat je dit aantal zo hoog kunt oplopen als nodig, maar 64K is voldoende voor mijn behoeften op dit moment, dus ik heb het nog niet geprobeerd.

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

56
2017-08-24 17:18



Zeer nuttig, mijn probleem opgelost met Solr. Het lijkt erop dat we krassen op de standaard 8192-limiet in de server.xml config, zonder het te merken, en sla er opeens in. Pijnlijke gotcha: niets nergens is ingelogd, de verbindingen zijn stilgevallen (ik kan me de HTTP-status niet meer herinneren). Ik struikelde over de documentatie bij tomcat.apache.org/tomcat-5.5-doc/config/http.html voorheen, maar ik associeerde de maxHttpHeaderSize door zijn naam noch de beschrijving om zelf te worden gerelateerd aan de GET-verzoekqueryparameters. - mark
We hebben ook dezelfde limiet bereikt in Solr, niets dan een lege witte pagina ... :( De maxHttpHeaderSize heeft de truc gedaan. - user85116
Hetzelfde hier :) Zeer nuttige tip, dank je. - Stefan
Ik denk dat de maxHttpHeaderSize = "100000" niet mogelijk is, het moet vermenigvuldigd zijn met 1024. Ik heb de maxHttpHeaderSize = "1048576" veranderd, wat 1024 * 1024 is en het werkt nog steeds niet.
Een geaccepteerd antwoord, "maxHttpHeaderSize =" 65536 " werkt niet Het werkte eerder vanwege kever in Tomcat. URL / URI heeft niets te maken met HTTP-headers. - Fuad Efendi


De lengte van een HTTP GET-verzoek wordt niet afgedwongen door RFC2616, zoals Microsoft meldt voor zijn IE max lengte ondersteuningspagina.

Zo, de maximale GET-lengte is een client (browser) gerelateerd probleem. Als uw app wordt gebruikt door mensen die u kunt forceren om een ​​bepaalde browser te gebruiken, kunt u eenvoudig achterhalen wat de lengte is van deze browser.

In elk geval stel ik een blik op de Wikypedia pagina over die browser gerelateerde problemen op de Query-string (het deel van de request-brengparameters voor server-side-apps, degene die volgt op de "?" die uiteindelijk in een verzoek aanwezig is.

Natuurlijk zal tomcat ook een limiet stellen aan de serverkant. RFC zegt:

Servers MOETEN de URI kunnen verwerken   van elke bron die ze dienen, en ZOUDEN MOETEN zijn   URI's van onbegrensd kunnen verwerken   lengte als ze GET-gebaseerde formulieren bieden   die dergelijke URI's zou kunnen genereren. EEN   server MOET 414 retourneren (Request-URI   Te lang) status als een URI langer is   dan de server aankan (zie   sectie 10.4.15).

dus je kunt eenvoudig testen of Tomcat een limiet heeft en uitvinden wat deze limiet is door simpelweg verschillende verzoeken te gebruiken, beginnend bij een zeer lange fout die de fout geeft en met de helft afneemt. Gebruik vervolgens de bisectiemethode om snel de exacte waarde te vinden.


5
2017-08-20 15:59



Albert, ik wist dat Tomcat uit de doos een limiet had (zoiets als 8K); Ik vroeg me af of er een limiet was die zelfs de configuratie niet kon overstijgen. - Michael Gundlach


Voor de AJP-connector moet u de packetSize attribuut:

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

2
2018-02-26 12:34



Als u mod_proxy gebruikt, moet u dit instellen ProxyIOBufferSize 65536  in je httpd config ook. - suicide


U kunt de configuratie wijzigen op Tomcat-server (.. \ Tomcat 6.0 \ conf \ server.xml)

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


1
2018-04-08 11:37



U kunt dit antwoord verbeteren door uw code te formatteren en uit te leggen waarom het de OP-vraag van het antwoord is. - james.garriss