Esiste un limite di lunghezza pratico HTTP Header?
-
11-09-2019 - |
Domanda
Ho un'applicazione web che aggiunge informazioni contestuali agli oggetti XmlHttpRequest utilizzando il setRequestHeader API. Sto usando un nome personalizzato di intestazione (ad esempio X-Foo) e una JSON valore strutturato. Non è parte del QueryString URL o corpo POST perché è le informazioni relative alla richiesta.
C'è un limite pratico formato per il valore di intestazione? Se il mio JSON viene troncato, diventa di analizzarlo. Io sono più interessato con limiti in Apache 2, Tomcat 6 e IIS 7. Ho fatto una ricerca su Google per http limite di lunghezza di intestazione , ma molti dei risultati sembrano datate. Ci sono alcune osservazioni pertinenti in Quanto può essere grande una stringa user agent ottenere? , ma non così specifica come vorrei.
Modifica Ho appena imbattuto in questa domanda simile? - su valori di intestazione http
Soluzione
Sì, ma i limiti sono configurabili e dipende dalla piattaforma. Ad esempio, Tomcat ha un limite predefinito di 8K. Credo che IIS 6, non sono sicuro di IIS 7, ha un limite di 16K. Mi sono imbattuto in questo quando si utilizza l'autenticazione integrata di Windows per diversi siti web. Si scopre che il mio token di sicurezza era troppo grande quando codificato nell'intestazione. Fortunatamente, queste sono configurabili. impostazioni di Registro di sistema per IIS sono disponibili all'indirizzo http://support.microsoft.com/kb/820129 . Credo che le impostazioni dei tasti per cambiare sono MaxFieldLength (per intestazione size) e MaxRequestBytes (dimensione totale della richiesta).
Altri suggerimenti
Anche se ogni software server web ha alcune limitazioni, c'è una differenza se c'è un limite per la più di intestazione campi di linea richiesta HTTP o per ogni campo di intestazione.
Ecco un riepilogo:
Quindi, per concludere: Per essere accettati da tutti i server web di cui sopra, a richiesta di linea, più di intestazione campi di richiesta non dovrebbe superare i 8190 byte . Questo è anche il limite per ogni campi di intestazione (efficacemente anche meno).
Per Apache, ho trovato questo Server per Apache sicurezza articolo che elenca queste direttive:
# allow up to 100 headers in a request
LimitRequestFields 100
# each header may be up to 8190 bytes long
LimitRequestFieldsize 8190
Per Nginx, il large_client_header_buffers direttiva da HttpCoreModule controlla questo:
La riga di intestazione più lunga della richiesta deve essere non superiore alla dimensione di un buffer, in caso contrario il cliente ottiene l'errore "Bad Request" (400).
Per default la dimensione di un buffer è uguale alla dimensione della pagina, a seconda della piattaforma di questo o 4K o 8K
Mentre è possibile configurare il server, è improbabile che davvero possibile configurare tutta la strada attraverso i firewall, bilanciatori di carico e proxy. Mantenere la dimensione di intestazione piccola mantiene problemi di distanza.
Il Flash Media Server 4.5 ha un tempo molto breve limite di lunghezza di intestazione di default che può causare il server semplicemente non risponde, in particolare nei casi in cui c'è un carico di cookie moderata.
Nel file Flash Media Server Adaptor.xml, il
MaxHeaderLineLength
elemento determina la dimensione dell'intestazione HTTP il server può gestire. Il valore predefinito perMaxHeaderLineLength
è 1024 byte. alcuni browser invia un'intestazione maggiore di 1024 byte. In questo scenario, Apache invia eseguire una risposta vuota. Per risolvere questo problema, configurareMaxHeaderLineLength
al 8192.Nota. Per default, il limite di dimensione dell'intestazione HTTP Apache è 8 KB (8190 byte, più un ritorno)
Mettendo questo qui nel caso in cui il limite di dimensione di intestazione su Flash Media Server morde qualcun altro.