sviluppo-web-qa.it

Qual è la lunghezza massima dell'URL in Tomcat?

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 hai molti dati; questa è un'opzione meno piacevole in questo caso particolare. L'applicazione contenuta (un motore di ricerca) si aspetta che una richiesta GET esegua una ricerca .

42
Michael Gundlach

È 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" ... />
59
Michael Gundlach

La lunghezza di una richiesta HTTP GET non è applicata da RFC2616 , come riportato da Microsoft per la sua pagina di supporto lunghezza massima 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 relativa ai 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 è in grado di gestire (vedere la sezione 10.4.15).

quindi puoi facilmente verificare se Tomcat ha un limite e scoprire quale limite sta semplicemente utilizzando 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.

6
drAlberT

Per il connettore AJP, è necessario regolare l'attributo packetSize:

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

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" />

1
Thalaiselvam