Lunghezza massima della richiesta GET HTTP


488

Qual è la lunghezza massima di una richiesta GET HTTP ?

È stato definito un errore di risposta che il server può / dovrebbe restituire se riceve una richiesta GET che supera questa lunghezza?

Questo è nel contesto di un'API del servizio Web, anche se è interessante vedere anche i limiti del browser.



7
@KillianDS Non ha assolutamente nulla a che fare con la lunghezza massima di un URL. La domanda riguarda la lunghezza massima di una richiesta inviata a un URL.
Marchese di Lorne,

2
@EJP il contenuto dei 'dati' di un GET non è altro che un URI.
KillianDS,

@JimAho il tuo commento è anche un duplicato del primo commento .....
Jun711,

Risposte:


464

Il limite dipende sia dal server che dal client utilizzati (e, se applicabile, anche dal proxy utilizzato dal server o dal client).

La maggior parte dei server Web ha un limite di 8192 byte (8 KB), che di solito è configurabile da qualche parte nella configurazione del server. Per quanto riguarda la questione lato client, le specifiche HTTP 1.1 lo avvertono persino. Ecco un estratto del capitolo 3.2.1 :

Nota: i server devono essere cauti a seconda della lunghezza dell'URI superiore a 255 byte, poiché alcune implementazioni client o proxy precedenti potrebbero non supportare correttamente tali lunghezze.

Il limite in Internet Explorer e Safari è di circa 2 KB, in Opera circa 4 KB e in Firefox circa 8 KB. Possiamo quindi supporre che 8 KB sia la lunghezza massima possibile e che 2 KB sia una lunghezza più conveniente su cui fare affidamento sul lato server e che 255 byte sia la lunghezza più sicura per assumere che l'intero URL entrerà.

Se il limite viene superato nel browser o nel server, la maggior parte troncerà i caratteri al di fuori del limite senza alcun preavviso. Alcuni server potrebbero tuttavia inviare un errore HTTP 414 . Se è necessario inviare dati di grandi dimensioni, utilizzare meglio POST anziché GET. Il suo limite è molto più alto, ma dipende più dal server utilizzato che dal client. Di solito fino a circa 2 GB è consentito dal web server medio. Questo è anche configurabile da qualche parte nelle impostazioni del server. Il server medio visualizzerà un errore / un'eccezione specifica del server quando viene superato il limite POST, generalmente come errore HTTP 500.


6
Rispondi alla domanda in termini di limitazioni del browser. Sai se ci sono differenze tra GET e POST (in termini di dimensioni della richiesta problematica) se, ad esempio, HttpClient viene utilizzato per interagire con un server REST?
aioobe,

3
Certo, POST usa il corpo per inviare i dati. La specifica HTTP non impone un limite di dimensione specifica per i post.
Ignacio A. Poletti,

1
Le specifiche Http consentono perfettamente di inserire un corpo nelle richieste GET ed DELETE. L'ho testato in Java e funziona. Purtroppo qui di nuovo alcuni proxy potrebbero tagliare tutto il corpo.
Nicolas Zozol,

12
Il metodo Get and Post ha un significato molto specifico, quindi l'utilizzo di un POST per eseguire un GET equivale all'utilizzo di un martello per rompere un uovo.
nohros,

18
@nohros È idealisticamente vero, ma GET ha anche dei limiti che POST / PUT non hanno. Ad esempio, supponiamo di voler eseguire una query molto lunga che coinvolge un gruppo di ID; se selezioni centinaia di ID, ciò può violare il limite della dimensione URL consentita, mentre l'inserimento di una query in un POST può evitarlo, anche se concettualmente non ha molto senso. Personalmente, vorrei che HTTP consentisse alle richieste GET di avere corpi come PUT e POST.
devios1

143

Stai ponendo due domande separate qui:

Qual è la lunghezza massima di una richiesta GET HTTP?

Come già accennato, HTTP stesso non impone alcun limite hardcoded sulla lunghezza della richiesta; ma i browser hanno limiti che vanno dai 2 KB agli 8 KB (255 byte se contiamo browser molto vecchi ).

È stato definito un errore di risposta che il server può / dovrebbe restituire se riceve una richiesta GET che supera questa lunghezza?

Questo è quello a cui nessuno ha risposto.

HTTP 1.1 definisce il codice di stato 414 Request-URI Too Longper i casi in cui viene raggiunto un limite definito dal server. Puoi vedere ulteriori dettagli su RFC 2616 .

Nel caso di limiti definiti dal client, non ha alcun senso che il server restituisca qualcosa, poiché il server non riceverà affatto la richiesta.


23

I limiti del browser sono:

Browser           Address bar    document.location
                                 or anchor tag
---------------------------------------------------
Chrome                32779           >64k
Android                8192           >64k
Firefox                >64k           >64k
Safari                 >64k           >64k
Internet Explorer 11   2047           5120
Edge 16                2047          10240

Voglio di più? Vedi questa domanda su Stack Overflow .



3

Tecnicamente, ho visto che HTTP GET avrà problemi se la lunghezza dell'URL supera i 2000 caratteri. In tal caso, è meglio utilizzare HTTP POST o dividere l'URL.


2

Come già accennato, HTTP stesso non impone alcun limite hardcoded sulla lunghezza della richiesta; ma i browser hanno limiti che vanno al carattere 2048 consentito nel metodo GET.


-6

RICHIEDI RICHIESTA utilizzando il browser Chrome

Sì. Non esiste alcun limite per una richiesta GET.

Sono in grado di inviare ~ 4000 caratteri come parte della stringa di query utilizzando sia il browser Chrome che il comando curl.

Sto usando il server Tomcat 8.x che ha restituito la risposta 200 OK prevista.

Ecco lo screenshot di una richiesta HTTP di Google Chrome (nascondere l'endpoint che ho provato per motivi di sicurezza):

RISPOSTA

OTTIENI utilizzando il browser Chrome

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.