Risposte:
No, HTTP non definisce alcun limite. Tuttavia, la maggior parte dei server Web limita la dimensione delle intestazioni che accetta. Ad esempio, il limite predefinito di Apache è 8 KB, in IIS è 16 KB . Il server restituirà un 413 Entity Too Large
errore se la dimensione delle intestazioni supera tale limite.
Domanda correlata: quanto può essere grande una stringa dell'agente utente?
Come dice vartec sopra, le specifiche HTTP non definiscono un limite, tuttavia molti server lo fanno di default. Ciò significa, praticamente parlando, il limite inferiore è 8K . Per la maggior parte dei server, questo limite si applica alla somma della riga della richiesta e di TUTTI i campi di intestazione (quindi mantieni i cookie brevi).
Vale la pena notare che nginx utilizza le dimensioni della pagina del sistema per impostazione predefinita, che è 4K sulla maggior parte dei sistemi. Puoi verificare con questo piccolo programma:
pagesize.c:
#include <unistd.h>
#include <stdio.h>
int main() {
int pageSize = getpagesize();
printf("Page size on your system = %i bytes\n", pageSize);
return 0;
}
Compilare con gcc -o pagesize pagesize.c
quindi eseguire ./pagesize
. Il mio server Ubuntu di Linode mi informa debitamente che la risposta è 4K.
LimitRequestLine
e si LimitRequestFieldSize
applica a ciascuna riga di intestazione HTTP singolarmente ... non alla "somma di ..."
HTTP non pone un limite predefinito sulla lunghezza di ciascun campo di intestazione o sulla lunghezza della sezione di intestazione nel suo insieme, come descritto nella Sezione 2.5. Nella pratica si trovano varie limitazioni ad hoc sulla lunghezza del campo dell'intestazione individuale, spesso a seconda della semantica del campo specifico.
I valori dell'intestazione HTTP sono limitati dalle implementazioni del server. Le specifiche HTTP non limitano le dimensioni dell'intestazione.
Un server che riceve un campo di intestazione della richiesta, o un insieme di campi, più grande di quello che desidera elaborare DEVE rispondere con un codice di stato 4xx (Errore client) appropriato. Ignorare tali campi di intestazione aumenterebbe la vulnerabilità del server per richiedere attacchi di contrabbando (Sezione 9.5).
La maggior parte dei server restituirà 413 Entity Too Large
un errore 4xx appropriato quando ciò accade.
Un client PU disc scartare o troncare i campi di intestazione ricevuti che sono più grandi di quelli che il cliente desidera elaborare se la semantica dei campi è tale che i valori rilasciati possono essere ignorati in modo sicuro senza modificare l'inquadramento dei messaggi o la semantica di risposta.
Le dimensioni dell'intestazione HTTP senza cappuccio mantengono il server esposto agli attacchi e possono ridurre la sua capacità di servire traffico organico.
Ho anche scoperto che in alcuni casi il motivo di 502/400 nel caso di molte intestazioni potrebbe essere dovuto a un gran numero di intestazioni indipendentemente dalle dimensioni. dai documenti
tune.http.maxhdr Imposta il numero massimo di intestazioni in una richiesta. Quando una richiesta arriva con un numero di intestazioni maggiore di questo valore (inclusa la prima riga), viene rifiutata con un codice di stato "400 Bad Request". Allo stesso modo, le risposte troppo grandi vengono bloccate con "502 Bad Gateway". Il valore predefinito è 101, che è sufficiente per tutti gli usi, considerando che il server Apache ampiamente distribuito utilizza lo stesso limite. Può essere utile spingere ulteriormente questo limite per consentire temporaneamente a un'applicazione buggy di funzionare quando viene riparata. Tieni presente che ogni nuova intestazione consuma 32 bit di memoria per ogni sessione, quindi non spingere questo limite troppo alto.
https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr