2009-07-08 12 views
66

Ho un'applicazione Web che aggiunge informazioni contestuali agli oggetti XmlHttpRequest utilizzando l'API setRequestHeader. Sto usando un nome di intestazione personalizzato (ad esempio X-Foo) e un valore strutturato JSON. Non fa parte dell'URL QueryString o del corpo POST perché si tratta di metadati sulla richiesta.Esiste un limite di lunghezza HTTP Header pratico?

Esiste un limite di dimensione pratica al valore di intestazione? Se il mio JSON viene troncato, diventa incomparabile. Sono più interessato ai limiti di Apache 2, Tomcat 6 e IIS 7. Ho eseguito una ricerca su Google per il limite di lunghezza dell'intestazione http , ma molti risultati sembrano datati. Ci sono alcuni commenti rilevanti in How big can a user agent string get? ma non così specifici come vorrei.

Edit: Ho appena imbattuto in questa domanda simile - Maximum on http header values?

+0

Approccio interessante.Quali metadati stai inviando in questo modo? –

+0

Si noti inoltre che ciò potrebbe causare problemi se un utente si connette tramite un server proxy – carpii

risposta

45

Sì, ma i limiti sono configurabili e dipende dalla piattaforma. Ad esempio, Tomcat ha un limite predefinito di 8 KB. Credo che IIS 6, non sicuro su IIS 7, abbia un limite di 16K. Mi sono imbattuto in questo quando si utilizza l'autenticazione integrata di Windows per diversi siti web. Risulta che il mio token di sicurezza era troppo grande quando è stato codificato nell'intestazione. Fortunatamente, questi sono configurabili. Le impostazioni del Registro di sistema per IIS sono disponibili all'indirizzo http://support.microsoft.com/kb/820129. Credo che le impostazioni chiave da modificare siano MaxFieldLength (per dimensione intestazione) e MaxRequestBytes (dimensione totale della richiesta).

+1

Ho trovato questo collegamento su MSDN per impostare i limiti dell'intestazione IIS per un'intestazione specifica - http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits/headerLimits –

+0

Secondo l'articolo della Knowledge Base, questi campi del Registro di sistema funzionano per IIS6 e IIS7 – Cheeso

+1

Mentre è possibile configurare il server, è improbabile che sia possibile configurare l'intero sistema attraverso firewall, load balancer e proxy. Mantenere la dimensione dell'intestazione piccola mantiene i problemi lontani. – Lothar

14

Per Apache, ho trovato questo Server Limits for Apache Security 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, la direttiva large_client_header_buffers da HttpCoreModule controlli questo:

La riga di intestazione più lunga della richiesta deve essere non più della dimensione di un buffer, altrimenti il ​​client ottiene l'errore "Richiesta non valida" (400).

Per default la dimensione di un buffer è uguale alla dimensione della pagina, seconda piattaforma sia 4K o 8K

52

Sebbene ogni software server web ha alcune limitazioni, c'è una differenza se c'è un limite per i campi di intestazione HTTP request line plus o per ciascun campo di intestazione.

Ecco un riassunto:

  • Apache 1.3, 2.0, 2.2, 2.3: 8190 Bytes (per ogni campo di intestazione)
  • IIS:
    • 4.0: 2097152 Bytes (per i campi riga di richiesta più intestazione)
    • 5.0: 131072 Bytes, 16384 byte con Windows 2000 Service Pack 4 (per la linea di richiesta più campi di intestazione)
    • 6.0: 16384 Bytes (per ogni campi di intestazione)
  • Tomcat:
    • 5.5.x/6.0.x: 49152 Bytes (per la richiesta di linea più intestazione campi)
    • 7.0.x: 8190 Bytes (per la linea di richiesta più campi di intestazione)

Quindi, per concludere: Per essere accettati da tutti i server web di cui sopra, la richiesta di linea più intestazione campi di una richiesta non dovrebbe superare 8190 byte. Questo è anche il limite per ogni campo di intestazione (effettivamente anche meno).

3

Il Flash Media Server 4.5 ha un limite di lunghezza di intestazione predefinito molto breve che può causare semplicemente una mancata risposta del server, in particolare nelle circostanze in cui è presente un carico di cookie moderato.

See: Flash Media Server 4.5 Configuration and Administration: Configuring the server Configuring Apache HTTP Server: Specify the maximum HTTP header line length

Nel file Flash Media Server Adaptor.xml, l'elemento MaxHeaderLineLength determina la dimensione del HTTP intestazione del server in grado di gestire. Il valore predefinito per MaxHeaderLineLength è 1024 byte. Alcuni browser inviano un'intestazione maggiore di 1024 byte. In questo scenario, Apache invia una risposta vuota. Per risolvere questo problema, configurare MaxHeaderLineLength 8192.

Nota: per impostazione predefinita, il limite di dimensione dell'intestazione HTTP Apache è 8 KB (8190 byte più un ritorno del carrello).

Inserire questo nel caso in cui il limite di dimensione dell'intestazione su Flash Media Server morde qualcun altro.

4

Mentre è possibile configurare il server, è improbabile che sia possibile configurare l'intero sistema tramite firewall, load balancer e proxy. Mantenere la dimensione dell'intestazione piccola mantiene i problemi lontani.

Problemi correlati