Analizzatore di intestazioni HTTP — intestazioni di richiesta e risposta, decodificate riga per riga
Analizzatore di intestazioni HTTP
Incolli una richiesta o una risposta HTTP completa — il blocco che stampa curl -v, oppure ciò che mostra il pannello Rete del browser — e ogni riga di intestazione viene decodificata: il nome, il valore, una frase in linguaggio semplice su che cosa fa, e il documento che la definisce. Set-Cookie viene scomposto attributo per attributo (Secure, HttpOnly, SameSite, Max-Age, Expires…), i parametri di Content-Type e Accept vengono espansi, e il blocco viene verificato per i classici problemi strutturali: righe ripiegate obsolete, caratteri illegali, intestazioni duplicate e intestazioni inviate nella direzione sbagliata. Tutto viene eseguito nel browser e nulla viene caricato.
Input
Automaticamente osserva la prima riga: una riga di richiesta (GET /percorso HTTP/1.1) indica una richiesta, una riga di stato (HTTP/1.1 200 OK) indica una risposta, qualsiasi altra cosa viene letta come un semplice blocco di intestazioni. Le altre scelte forzano la direzione, il che cambia quali avvisi si applicano.
Rapporto di analisi
Nulla è ancora stato analizzato. Incolli sopra un blocco di richiesta o risposta e prema Analizza intestazioni, oppure prema Esempio per un caso svolto.
Dove trovare un blocco che valga la pena analizzare. In un terminale, curl -v https://example.com/ 2>&1 stampa la richiesta e la risposta con i prefissi > e < — li tolga e incolli. curl -sI https://example.com/ dà solo il blocco di intestazioni della risposta. Nel browser, apra gli strumenti per sviluppatori, la scheda Rete, ricarichi, selezioni la richiesta del documento e usi Copia → Copia intestazioni di risposta; per il lato richiesta usi Copia come cURL e legga i flag. Anche un semplice blocco di righe Nome: valore senza riga iniziale viene analizzato — in quel caso i controlli sulla direzione sono rilassati.
Autotest Riesegue il parser su blocchi fissi: rilevamento della direzione, entrambi i set di esempio, ogni regola sugli attributi di Set-Cookie (SameSite=None senza Secure, un Max-Age non numerico, un Expires non valido, un attributo sconosciuto, un cookie senza segno di uguale), unione obs-fold, nomi di campo illegali, intestazioni duplicate, mancate corrispondenze di direzione e i percorsi negativi. Nulla viene inviato da nessuna parte.
Che cos'è un'intestazione HTTP?
In una frase: un messaggio HTTP è una riga di avvio, un blocco di righe Nome: valore chiamate intestazioni, una riga vuota e un corpo facoltativo — le intestazioni portano tutto ciò che riguarda il messaggio tranne il corpo stesso: chi lo ha inviato, che cosa può accettare, come viene memorizzato nella cache, come viene autenticato e che cosa il mittente vuole in cambio.
Le quattro famiglie
Famiglia
Viaggia
Esempi
Risponde alla domanda
Intestazioni di richiesta
client → server
Host, Accept, Cookie, Referer, Authorization
che cosa vuole il client e chi dice di essere
Intestazioni di risposta
server → client
Location, Server, Set-Cookie, Retry-After
che cosa ha fatto il server e che cosa chiede in cambio
in quale formato è il corpo e quale copia di esso è
Intestazioni di controllo
entrambi, sulla connessione
Cache-Control, Connection, Via, Transfer-Encoding
come vengono gestiti il messaggio e la connessione durante il percorso
Alcune intestazioni sono rigorosamente unidirezionali: If-None-Match ha senso solo in una richiesta e Set-Cookie solo in una risposta. Analizzare nella direzione sbagliata è uno dei classici errori di debug da copia-incolla, ed è per questo che questa pagina lo segnala.
La grammatica di una riga di intestazione
La RFC 9110 definisce una riga di campo come field-name ":" OWS field-value OWS — un nome composto solo da caratteri di token (lettere, cifre e !#$%&'*+-.^_`|~), due punti senza spazio prima, e un valore di caratteri visibili, spazi e tabulazioni. I nomi delle intestazioni non distinguono maiuscole e minuscole (content-type equivale a Content-Type); i valori quasi sempre sì. Una riga che inizia con uno spazio o una tabulazione continuava l'intestazione precedente — obs-fold, obsoleto dal 2014: un proxy che la «srotola» può cambiare il significato dell'intestazione, quindi il parser qui la unisce ma avvisa che c'è.
Errori comuni
Fidarsi di X-Forwarded-For. Viene aggiunto da ogni proxy lungo il percorso, e un client può falsificare il primo salto. Indica ciò che una catena di proxy dichiara, non chi è connesso; lo tratti come un indizio, e preferisca un proxy che controlla e che la sovrascrive.
Leggere solo le intestazioni di risposta. Metà degli errori più interessanti (un Accept duplicato, un Host mancante, un'intestazione di autorizzazione diretta all'host sbagliato) si trova nella richiesta, che il browser nasconde per impostazione predefinita. Usi Copia come cURL per vedere le proprie.
Unire le righe di Set-Cookie. La maggior parte delle intestazioni duplicate può essere combinata con virgole — Set-Cookie non deve, perché la virgola compare dentro il valore stesso. I browser trattano ogni riga come un cookie separato.
Aspettarsi che Content-Length sia la dimensione del corpo che ha scritto. È la dimensione dopo l'applicazione di Content-Encoding ed è valida solo quando il messaggio non è in chunked; una risposta con Transfer-Encoding: chunked non ha una lunghezza singola significativa.
Giudicare le intestazioni dal prefisso X-. La convenzione è morta con la RFC 6648: X-Forwarded-For e X-Content-Type-Options sono standard di fatto permanenti, mentre molte intestazioni senza X sono sperimentali. Giudichi dal documento che le definisce, non dal prefisso.
Domande frequenti
È sicuro incollare qui le intestazioni? L'analisi avviene interamente nel browser e nulla viene caricato. Detto questo, un blocco di intestazioni copiato è un'impronta digitale: cookie, intestazioni di autorizzazione e lo User-Agent esatto possono identificarla, quindi analizzi blocchi che non le dispiacerebbe mostrare a un collega.
Perché il mio browser mostra intestazioni come :status che questa pagina segnala come errori? Sono pseudo-intestazioni di HTTP/2 e HTTP/3 — i livelli di framing binario sostituiscono la riga di avvio e Host con pseudo-campi. Questa pagina analizza il testo classico di HTTP/1.1; le pseudo-intestazioni contengono le stesse informazioni dopo che il protocollo le ha tradotte.
Che fine ha fatto X-XSS-Protection? È deprecata: l'auditor che controllava ha causato bug di sicurezza propri e i browser l'hanno rimossa. Il suo compito spetta a una Content-Security-Policy — la costruisca con il generatore CSP e verifichi l'insieme completo con il verificatore delle intestazioni di sicurezza.
Come viene verificato un attributo di Set-Cookie? Secondo la RFC 6265: nomi e valori vengono separati al primo segno di uguale, gli attributi dopo il primo punto e virgola, Expires deve essere una data nel formato dei cookie, Max-Age cifre, SameSite uno tra Strict/Lax/None — e None senza Secure viene rifiutato dai browser attuali, quindi viene segnalato.
Posso analizzare solo un elenco di righe di intestazione? Sì — scelga Solo blocco di intestazioni e incolli senza riga di avvio. I controlli sulla direzione vengono rilassati; tutto il resto (struttura, Set-Cookie, parametri) continua a funzionare.