C’è un limite di lunghezza HTTP Header pratico?

Ho un’applicazione web che aggiunge informazioni contestuali agli oggetti XmlHttpRequest usando l’API setRequestHeader . Sto usando un nome di intestazione personalizzato (ad es. 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 dimensioni pratiche al valore dell’intestazione? Se il mio JSON viene troncato, diventa incomparabile. Sono più interessato ai limiti di Apache 2, Tomcat 6 e IIS 7. Ho fatto una ricerca su Google per il limite di lunghezza dell’intestazione http , ma molti risultati sembrano datati. Ci sono alcuni commenti rilevanti in Quanto può ottenere una stringa di agente utente? ma non così specifico come vorrei.

Modifica: mi sono imbattuto in questa domanda simile. Massimo sui valori dell’intestazione http?

    Sì, ma i limiti sono configurabili e dipendenti dalla piattaforma. Ad esempio, Tomcat ha un limite predefinito di 8K. 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).

    Sebbene ogni software del server Web abbia alcune limitazioni, c’è una differenza se esiste un limite per la riga di richiesta HTTP più i campi di intestazione 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 byte (per i campi riga di richiesta più intestazione)
      • 5.0 : 131072 byte , 16384 byte con Windows 2000 Service Pack 4 (per i campi riga di richiesta più intestazione)
      • 6.0 : 16384 byte (per ogni campo di intestazione)
    • Tomcat:
      • 5.5.x / 6.0.x : 49152 byte (per i campi riga di richiesta più intestazione)
      • 7.0.x : 8190 byte (per i campi riga di richiesta più intestazione)

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

    Per Apache, ho trovato questo Limiti del server per l’ articolo di sicurezza Apache 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 di HttpCoreModule controlla questo:

    Anche la riga di intestazione più lunga della richiesta deve essere non superiore alla dimensione di un buffer, altrimenti il ​​client riceve l’errore “Richiesta non valida” (400).

    Per impostazione predefinita, la dimensione di un buffer è uguale alla dimensione della pagina, a seconda della piattaforma può essere 4K o 8K

    Mentre è ansible configurare il server, è improbabile che si possa realmente configurare l’intero sistema attraverso firewall, load balancer e proxy. Mantenere la dimensione dell’intestazione piccola mantiene i problemi lontani.

    Flash Media Server 4.5 ha un limite di lunghezza dell’intestazione predefinito molto breve che può causare semplicemente una mancata risposta del server, in particolare in caso di carico moderato dei cookie.

    Vedere: Flash Media Server 4.5 Configurazione e amministrazione: configurazione del server Configurazione del server Apache HTTP: specificare la lunghezza massima della linea dell’intestazione HTTP

    Nel file Adaptor.xml di Flash Media Server, l’elemento MaxHeaderLineLength determina la dimensione dell’intestazione HTTP che il server può gestire. Il valore predefinito per MaxHeaderLineLength è 1024 byte. Alcuni browser inviano un’intestazione superiore a 1024 byte. In questo scenario, Apache restituisce una risposta vuota. Per risolvere questo problema, configurare MaxHeaderLineLength su 8192.

    Nota: per impostazione predefinita, il limite della dimensione dell’intestazione HTTP Apache è 8 KB (8190 byte più un ritorno a capo).

    Mettetelo qui nel caso in cui il limite della dimensione dell’intestazione su Flash Media Server morde qualcun altro.