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

È stato utile?

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:

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

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.

Si veda: Flash media Server 4.5 Configurazione e amministrazione: Configurazione del server Configurazione di Apache HTTP Server: specificare la lunghezza massima di intestazione HTTP linea

  

Nel file Flash Media Server Adaptor.xml, il MaxHeaderLineLength   elemento determina la dimensione dell'intestazione HTTP il server può gestire.   Il valore predefinito per MaxHeaderLineLength è 1024 byte. alcuni browser   invia un'intestazione maggiore di 1024 byte. In questo scenario, Apache invia   eseguire una risposta vuota. Per risolvere questo problema, configurare   MaxHeaderLineLength 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top