Analizor de antete HTTP — antete de cerere și de răspuns, decodate rând cu rând
Analizor de antete HTTP
Se lipește un bloc complet de cerere sau de răspuns HTTP — cel pe care îl afișează curl -v, sau ce arată panoul Network al browserului — și fiecare rând de antet este decodat: numele, valoarea, o propoziție în limbaj simplu despre ce face și documentul care îl definește. Set-Cookie este descompus atribut cu atribut (Secure, HttpOnly, SameSite, Max-Age, Expires…), parametrii Content-Type și Accept sunt extinși, iar blocul este auditat pentru problemele structurale clasice: linii pliate învechite, caractere ilegale, antete duplicate și antete trimise în direcția greșită. Totul rulează în browser și nimic nu se încarcă.
Intrare
Automat se uită la prima linie: o linie de cerere (GET /cale HTTP/1.1) înseamnă cerere, o linie de stare (HTTP/1.1 200 OK) înseamnă răspuns, orice altceva se citește ca un bloc simplu de antete. Celelalte alegeri forțează direcția, ceea ce schimbă avertismentele aplicate.
Raport analizat
Nimic analizat încă. Se lipește un bloc de cerere sau de răspuns mai sus și se apasă Analizează antetele, sau se apasă Exemplu pentru un caz lucrat.
De unde să se ia un bloc care merită analizat.
Într-un terminal, curl -v https://example.com/ 2>&1 afișează cererea și răspunsul cu prefixele > și < —
acestea se elimină și se lipește. curl -sI https://example.com/ dă doar blocul de antete al răspunsului. În browser se deschid instrumentele pentru dezvoltatori, fila Network, se reîncarcă pagina, se selectează cererea documentului și se folosește Copiere →
Copiere antete de răspuns; pentru partea de cerere se folosește Copiere ca cURL
și se citesc indicatorii. Un bloc simplu de linii Nume: valoare, fără linie de start, se analizează și el — verificările de direcție sunt atunci relaxate.
Autotest Rerulează analizorul pe blocuri fixe: detectarea direcției, ambele seturi de eșantioane, fiecare regulă de atribut Set-Cookie (SameSite=None fără Secure, Max-Age nenumeric, Expires defect, un atribut necunoscut, un cookie fără semnul egal), îmbinarea obs-fold, numele de câmpuri ilegale, antetele duplicate, nepotrivirile de direcție și căile negative. Nimic nu se trimite nicăieri.
Ce este un antet HTTP?
Într-o propoziție: un mesaj HTTP este o linie de start, un bloc de linii Nume: valoare numite antete, o linie goală și un corp opțional — antetele poartă tot ce privește mesajul, în afară de corpul propriu-zis: cine l-a trimis, ce poate accepta, cum este memorat în cache, cum este autentificat și ce așteaptă expeditorul ca răspuns.
în ce format este corpul și ce copie a lui este aceasta
Antete de control
ambele, despre conexiune
Cache-Control, Connection, Via, Transfer-Encoding
cum sunt tratate mesajul și conexiunea pe parcurs
Unele antete sunt ferm unidirecționale: If-None-Match are sens doar într-o cerere, iar Set-Cookie doar într-un răspuns. Analizarea în direcția greșită este una dintre greșelile clasice de depanare prin copiere-lipire, de aceea pagina o semnalează.
Gramatica unui rând de antet
RFC 9110 definește un rând de câmp ca field-name ":" OWS field-value OWS — un nume format doar din caractere de tip token (litere, cifre și !#$%&'*+-.^_`|~), două puncte fără spațiu înainte și o valoare din caractere vizibile, spații și tabulatoare. Numele antetelor nu depind de majuscule (content-type este același lucru cu Content-Type); valorile sunt aproape întotdeauna sensibile la majuscule. Un rând care începe cu spațiu sau tabulator continua antetul anterior — obs-fold, învechit din 2014: un proxy care îl desface poate schimba sensul antetului, așa că analizorul de aici îl îmbină, dar avertizează că există.
Greșeli frecvente
Încrederea în X-Forwarded-For. Este adăugat de fiecare proxy de pe traseu, iar un client poate falsifica primul salt. Spune ce afirmă un lanț de proxy-uri, nu cine este conectat; se tratează ca o indicație, iar varianta preferată este un proxy controlat de cineva care îl rescrie.
Citirea doar a antetelor de răspuns. Jumătate din greșelile interesante (un Accept duplicat, un Host lipsă, un antet de autorizare îndreptat spre gazda greșită) stau în cerere, pe care browserul o ascunde implicit. Se folosește Copiere ca cURL pentru a vedea propria cerere.
Îmbinarea liniilor Set-Cookie. Majoritatea antetelor duplicate pot fi combinate cu virgule — Set-Cookie nu poate, pentru că virgula apare în interiorul valorii. Browserele tratează fiecare linie ca un cookie separat.
Așteptarea ca Content-Length să fie dimensiunea corpului scris. Este dimensiunea după ce se aplică Content-Encoding și doar când mesajul nu este fragmentat; un răspuns Transfer-Encoding: chunked nu are o lungime unică semnificativă.
Judecarea antetelor după prefixul X-. Convenția a murit odată cu RFC 6648: X-Forwarded-For și X-Content-Type-Options sunt standarde de facto permanente, în timp ce multe antete care nu au X sunt experimentale. Se judecă după documentul care le definește, nu după prefix.
Întrebări frecvente
Este sigur să se lipească antete aici? Analiza se face integral în browser și nimic nu se încarcă. Totuși, un bloc de antete copiat este o amprentă: cookie-urile, antetele de autorizare și User-Agent-ul exact pot împreună să identifice o persoană, așa că se analizează doar blocuri care pot fi arătate unui coleg fără probleme.
De ce browserul afișează antete precum :status pe care această pagină le numește erori? Acestea sunt pseudo-antete HTTP/2 și HTTP/3 — straturile de încadrare binară înlocuiesc linia de start și Host cu câmpuri pseudo. Această pagină analizează textul clasic HTTP/1.1; pseudo-antetele reprezintă aceeași informație după ce protocolul a tradus-o.
Ce s-a întâmplat cu X-XSS-Protection? Este învechit: auditorul pe care îl controla avea propriile sale erori de securitate, iar browserele l-au eliminat. Rolul lui revine unei Content-Security-Policy — se construiește una cu Generatorul CSP și se auditează întregul set pe Verificatorul antetelor de securitate.
Cum se verifică un atribut Set-Cookie? Față de RFC 6265: numele și valorile se despart la primul semn egal, atributele după primul punct și virgulă, Expires trebuie să fie o dată în formatul cookie-urilor, Max-Age cifre, SameSite unul dintre Strict/Lax/None — iar None fără Secure este respins de browserele actuale, de aceea este semnalat.
Pot analiza doar o listă de rânduri de antete? Da — se alege Doar bloc de antete și se lipește fără linie de start. Verificările de direcție sunt relaxate; tot restul (structura, Set-Cookie, parametrii) rulează în continuare.