Qual è la lunghezza massima dell'URL in Tomcat?


43

Ed è configurabile? Posso configurare Tomcat in modo che un URL con, per esempio, 200K di parametri di query passi correttamente al servlet contenuto?

Sì, so che uno dovrebbe usare POST quando si hanno molti dati; questa è un'opzione meno piacevole in questo caso particolare. L'applicazione contenuta (un motore di ricerca) prevede che una richiesta GET esegua una ricerca.

Risposte:


60

È possibile modificare la voce connettore HTTP / 1.1 di tomcat / conf / server.xml e aggiungere un valore maxHttpHeaderSize = "65536" per aumentare da un massimo predefinito di 8 KB a 64 KB. Immagino che potresti aumentare questo numero quanto necessario, ma 64K sono sufficienti per le mie esigenze al momento, quindi non l'ho provato.

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

3
Molto utile, risolto il mio problema con Solr. Sembra che stessimo grattando il limite predefinito 8192 nella server.xmlconfigurazione, senza accorgercene, e all'improvviso l'abbiamo colpito. Gotcha doloroso: nulla è stato registrato da nessuna parte, le connessioni sono state silenziosamente interrotte (non ricordo più lo stato HTTP). Mi sono imbattuto nella documentazione su tomcat.apache.org/tomcat-5.5-doc/config/http.html prima, tuttavia non ho associato il maxHttpHeaderSizenome o la descrizione per essere correlati ai parametri della query GET stessa.
segna il

Abbiamo anche raggiunto lo stesso limite in Solr, nient'altro che una pagina bianca vuota ... :( il maxHttpHeaderSize ha fatto il trucco.
user85116

Penso che maxHttpHeaderSize = "100000" non sia possibile, dovrebbe essere moltiplicato per 1024. Ho cambiato maxHttpHeaderSize = "1048576" che è 1024 * 1024 e non funziona ancora.

3
Una risposta accettata, "maxHttpHeaderSize =" 65536 " non funziona Ha funzionato prima a causa di un bug in Tomcat. URL / URI non ha nulla a che fare con le intestazioni HTTP.
Fuad Efendi

1
@FuadEfendi allora qual'è la dimensione massima ora?
mjaggard,

5

La lunghezza di una richiesta GET HTTP non viene applicata da RFC2616 , in quanto Microsoft riporta la sua pagina di supporto per la lunghezza massima di IE .

Pertanto, la lunghezza GET massima è un problema relativo al client (browser) . Se la tua app viene utilizzata da persone che puoi forzare a utilizzare un determinato browser, puoi semplicemente trovare la lunghezza supportata da questo browser.

In ogni caso suggerisco di dare un'occhiata alla pagina Wikypedia su quei problemi relativi al browser sulla stringa di query (la parte della richiesta che porta i parametri per le app lato server, quella che segue il "?" Eventualmente presente in una richiesta.

Ovviamente forse Tomcat metterà un limite anche sul lato server. RFC dice:

I server DEVONO essere in grado di gestire l'URI di qualsiasi risorsa che servono e DOVREBBE essere in grado di gestire URI di lunghezza illimitata se forniscono moduli basati su GET che potrebbero generare tali URI. Un server DOVREBBE restituire lo stato 414 (Request-URI Too Long) se un URI è più lungo di quello che il server può gestire (vedere la sezione 10.4.15).

così puoi facilmente verificare se Tomcat ha un limite e scoprire quale limite sta semplicemente usando richieste diverse a partire da una molto lunga che dà l'errore e diminuisce della metà. Quindi utilizzare il metodo bisection per trovare rapidamente il valore esatto.


Albert, sapevo che Tomcat aveva un limite fuori dalla scatola (qualcosa come 8K); Mi chiedevo se ci fosse un limite che nemmeno la configurazione poteva superare.
Michael Gundlach,

2

Per il connettore AJP, è necessario regolare l' packetSizeattributo:

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

1
Se stai usando mod_proxy devi impostare anche la ProxyIOBufferSize 65536 tua configurazione httpd.
suicidio,

1

Puoi modificare la configurazione sul server Tomcat (.. \ Tomcat 6.0 \ conf \ server.xml)

<Porta connettore = "8983" maxHttpHeaderSize = "100000" protocollo = "HTTP / 1.1" connectionTimeout = "20000" redirectPort = "8443" />


È possibile migliorare questa risposta formattando il codice e spiegando perché risponde alla domanda OP.
james.garriss,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.