2009-05-01 17 views
425

Dipende dal browser? Inoltre, i diversi stack Web hanno limiti diversi sulla quantità di dati che possono ottenere dalla richiesta?Qual è la lunghezza massima possibile di una stringa di query?

+0

puoi anche controllare questo http://stackoverflow.com/questions/417142/quello-è-il-massimo-di-ora-di-an-url – Xinus

+0

È solo per le richieste GET! La dimensione massima delle richieste POST (con o senza multipart/form-data) è qui sconosciuta! – peterh

risposta

796

RFC 2616 (Hypertext Transfer Protocol - HTTP/1.1) afferma che non esiste un limite alla lunghezza di una stringa di query (sezione 3.2.1). RFC 3986 indica anche che non vi è alcun limite, ma indica che il nome host è limitato a 255 caratteri a causa delle limitazioni DNS (sezione 2.3.3).

Mentre le specifiche non specificano alcuna lunghezza massima, i limiti pratici sono imposti dal browser Web e dal software server. Sulla base della ricerca trovato alla Boutell.com:

  • Microsoft Internet Explorer (browser)
    Microsoft afferma che la lunghezza massima di un URL in Internet Explorer è 2083 caratteri, con non più di 2.048 caratteri nel percorso porzione dell'URL. I tentativi di utilizzare URL più lunghi di questo hanno prodotto un chiaro messaggio di errore in Internet Explorer.

  • Microsoft Edge (Browser)
    Il limite sembra essere di circa 81.578 caratteri. Vedere URL Length limitation of Microsoft Edge

  • Chrome
    Si ferma visualizzazione l'URL dopo 64k caratteri, ma può servire più di 100k caratteri. Nessun ulteriore test è stato fatto oltre.

  • Firefox (Browser)
    Dopo 65.536 caratteri, la barra degli indirizzi non visualizza più l'URL in Windows Firefox 1.5.x. Tuttavia, gli URL più lunghi funzioneranno. Non sono stati eseguiti ulteriori test dopo 100.000 caratteri.

  • Safari (Browser)
    almeno 80.000 caratteri funzionerà. Il test non è stato provato oltre.

  • Opera (Browser)
    Almeno 190.000 caratteri funzionerà. Test interrotto dopo 190.000 caratteri. Opera 9 per Windows ha continuato a visualizzare un URL modificabile e modificabile, copiabile nella barra degli indirizzi, anche a 190.000 caratteri.

  • Apache (Server)
    I primi tentativi di misurare la lunghezza massima URL nel browser web urtato in un limite di lunghezza URL del server di circa 4.000 caratteri, dopodiché Apache genera un errore "413 entità troppo grande". È stata utilizzata la versione corrente di Apache trovata in Red Hat Enterprise Linux 4. La documentazione ufficiale di Apache menziona solo un limite di 8.192 byte su un singolo campo in una richiesta.

  • Microsoft Internet Information Server (Server)
    Il limite predefinito è 16.384 caratteri (sì, il server web di Microsoft accetta gli URL più lunghi di browser web di Microsoft). Questo è configurabile.

  • Perl HTTP :: Daemon (Server)
    Fino a 8.000 byte funzionerà. Coloro che costruiscono server di applicazioni Web con il modulo HTTP :: Daemon di Perl incontreranno un limite di 16.384 byte sulla dimensione combinata di tutte le intestazioni delle richieste HTTP. Questo non include i dati dei moduli POST, i caricamenti di file, ecc., Ma include l'URL. In pratica ciò ha provocato un errore 413 quando un URL era significativamente più lungo di 8000 caratteri. Questa limitazione può essere facilmente rimossa. Cerca tutte le occorrenze di 16x1024 in Daemon.pm e sostituiscile con un valore maggiore. Ovviamente, questo aumenta la tua esposizione agli attacchi denial of service.

+3

Perché non si dice anche il numero di versione invece di "Microsoft Internet Explorer (Browser)"? – Lijo

+0

Grazie per il conteggio dei limiti nel carattere anziché in byte o qualcosa del genere :) Facile da capire. – sun

+5

Sembra che il limite IIS predefinito sulla stringa di query sia significativamente inferiore a 16.384 caratteri - citato come 2048 qui: https://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits – JTech

7

Suppongo che tu intenda la lunghezza massima per una stringa uri. This può aiutare.

In genere, una volta che gli URI diventano illeggibili perché sono troppo lunghi, è invece necessario utilizzare una richiesta POST.

+38

Passare a una richiesta POST semplicemente perché ci sono troppi dati per adattarsi a una richiesta GET ha poco senso. –

+0

@Johannes Se GET non funziona, ma il POST lo fa, allora perché non ha senso passare al POST? –

+8

@Eugene Beresovksy: Perché GET e POST significano cose diverse (vedere la [specifica HTTP/1.1] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)). –

1

Diversi stack Web supportano diverse lunghezze di richieste http. So per esperienza che i primi stack di Safari supportavano solo 4000 caratteri e quindi aveva difficoltà a gestire le pagine ASP.net a causa di USER-STATE. Questo vale anche per il POST, quindi dovresti controllare il browser e vedere qual è il limite dello stack. Penso che potresti raggiungere un limite anche sui nuovi browser. Non riesco a ricordare ma uno di loro (IE6, penso) aveva un limite di 16 bit, 32.768 o qualcosa del genere.

0

Anche se ufficialmente non c'è limite, molte raccomandazioni di configurazione della sicurezza affermano che maxQueryStrings su un server deve essere impostato a un limite massimo di caratteri di 1024, mentre l'intero URL tra cui la stringa di query deve essere impostato su un massimo di 2048 personaggi. Questo serve a prevenire la vulnerabilità Slow HTTP Request su un server Web per prevenire attacchi DDOS lenti.

Problemi correlati