HTTP-fejléc-elemző — kérés- és válaszfejlécek, soronként dekódolva
HTTP-fejléc-elemző
Egy teljes HTTP-kérés vagy -válasz illeszthető be — a blokk, amelyet a curl -v kiír, vagy amit a böngésző hálózati panele mutat —, és minden fejlécsor dekódolódik: a neve, az értéke, egy közérthető mondat arról, mit csinál, és a dokumentum, amely definiálja.
A Set-Cookie attribútumonként bontódik szét (Secure, HttpOnly, SameSite, Max-Age, Expires…), a Content-Type és az Accept paraméterei kibontódnak, a blokk pedig a klasszikus szerkezeti problémákra van ellenőrizve: elavult hajtogatott sorok, illegális karakterek, duplikált fejlécek és rossz irányban küldött fejlécek. Minden a böngészőben fut, és semmi nem töltődik fel.
Bemenet
Automatikusan az első sort nézi: a kéréssor (GET /path HTTP/1.1) kérést jelent, a státuszsor (HTTP/1.1 200 OK) választ, minden más pedig fejlécek puszta blokkjaként értelmeződik. A többi választás kényszeríti az irányt, ami megváltoztatja, mely figyelmeztetések érvényesek.
Elemzési jelentés
Még nincs elemzés. Fent egy kérés- vagy válaszblokk illeszthető be, majd a Fejlécek elemzése gombbal indítható az elemzés, vagy a Minta gomb ad kidolgozott példát.
Honnan szerezhető elemzésre érdemes blokk.
Terminálban a curl -v https://example.com/ 2>&1 a kérést és a választ > és < előtagokkal írja ki —
ezeket el kell távolítani, és be kell illeszteni. A curl -sI https://example.com/ csak a válaszfejléc-blokkot adja.
A böngészőben a fejlesztői eszközök Hálózat fülén, az oldal újratöltése után kijelölhető a dokumentumkérés, és a Másolás → Válaszfejlécek másolása funkcióval másolható; a kérésoldalhoz a Másolás cURL-ként funkció való, és a kapcsolók olvashatók.
Kezdősor nélküli, sima Név: érték sorblokk is elemezhető — ilyenkor az irány-ellenőrzések enyhébbek.
Önteszt Rögzített blokkokon újrafuttatja az elemzőt: irányfelismerés, mindkét mintakészlet, minden Set-Cookie attribútumszabály (SameSite=None Secure nélkül, nem numerikus Max-Age, hibás Expires, ismeretlen attribútum, egyenlőségjel nélküli süti), obs-fold összefűzés, illegális mezőnevek, duplikált fejlécek, irányeltérések és a negatív esetek. Semmi nem kerül elküldésre.
Mi az a HTTP-fejléc?
Egy mondatban: egy HTTP-üzenet egy kezdősor, Név: érték sorok blokkja (ezek a fejlécek), egy üres sor, és egy opcionális törzs — a fejlécek az üzenetről mindent hordoznak a törzsön kívül: ki küldte, mit fogad el, hogyan gyorsítótárazódik, hogyan hitelesítik, és mit vár a küldő válaszul.
milyen formátumú a törzs, és a tartalom melyik példányáról van szó
Vezérlőfejlécek
mindkettő, a kapcsolatra vonatkozóan
Cache-Control, Connection, Via, Transfer-Encoding
hogyan kezelendő az üzenet és a kapcsolat az útvonalon
Néhány fejléc szigorúan egyirányú: az If-None-Match csak kérésben van értelme, a Set-Cookie pedig csak válaszban. A rossz irányban való elemzés a klasszikus másolás-beillesztés hibakeresési hibák egyike, ezért jelzi ezt az oldal.
Egy fejlécsor nyelvtana
Az RFC 9110 szerint egy mezősor field-name ":" OWS field-value OWS — olyan név, amely csak tokenkarakterekből áll (betűk, számjegyek és !#$%&'*+-.^_`|~), kettőspont szóköz nélkül, és csak látható karakterekből, szóközökből és tabulátorokból álló érték. A fejlécnevek kis- és nagybetű-érzéketlenek (a content-type egyenlő a Content-Type-pal); az értékek szinte mindig kis- és nagybetű-érzékenyek. Az szóközzel vagy tabulátorral kezdődő sor korábban az előző fejlécet folytatta — obs-fold, 2014 óta elavult: az a proxy, amely kibontja, megváltoztathatja a fejléc jelentését, ezért az itteni elemző összefűzi, de jelzi, hogy ott volt.
Gyakori hibák
Az X-Forwarded-For bízása. Minden proxy az útvonalon hozzáadja, és az ügyfél hamisíthatja az első ugrást. Azt mondja meg, mit állít a proxylánc, nem azt, hogy ki csatlakozik; tippként kezelendő, és egy saját proxy felülírását érdemes előnyben részesíteni.
Csak a válaszfejlécek olvasása. Az érdekes hibák fele (duplikált Accept, hiányzó Host, rossz gazdagépnek szóló engedélyezési fejléc) a kérésben van, amelyet a böngésző alapértelmezésben elrejt. Az összes kérés megtekintéséhez a Másolás cURL-ként funkció használható.
A Set-Cookie sorok összevonása. A legtöbb duplikált fejléc vesszővel összevonható — a Set-Cookie viszont nem, mert a vessző magában az értékben szerepelhet. A böngészők minden sort külön sütiként kezelnek.
Azt várni, hogy a Content-Length a megírt törzs mérete legyen. A Content-Encoding alkalmazása után értendő, és csak akkor, ha az üzenet nincs darabolva; egy Transfer-Encoding: chunked válasznak nincs értelmes egyetlen hossza.
Fejlécek megítélése az X- előtag alapján. A konvenció az RFC 6648-ban megszűnt: az X-Forwarded-For és az X-Content-Type-Options állandó de facto szabványok, míg sok nem-X fejléc kísérleti. Az előtag helyett a meghatározó dokumentum alapján kell megítélni.
GYIK
Biztonságos-e fejléceket itt beilleszteni? Az elemzés teljes egészében a böngészőben történik, és semmi nem töltődik fel. Ettől függetlenül a másolt fejlécblokk ujjlenyomat: a sütik, az engedélyezési fejlécek és a pontos User-Agent együtt azonosíthatnak, ezért csak olyan blokkok elemezhetők, amelyeket nem bánnánk, ha egy munkatárs látna.
Miért mond ez az oldal hibát olyan fejlécekre, mint a :status, amelyeket a böngésző mutat? Ezek HTTP/2- és HTTP/3-pszeudofejlécek — a bináris keretezési rétegek a kezdősort és a Host-ot pszeudomezőkkel helyettesítik. Ez az oldal a klasszikus HTTP/1.1 szöveges formát elemzi; a pszeudofejlécek ugyanazt az információt hordozzák, miután a protokoll lefordította.
Mi lett az X-XSS-Protection-nel? Elavult: a hozzá tartozó auditor saját biztonsági hibákat okozott, a böngészők pedig eltávolították. A feladatát egy Content-Security-Policy veszi át: ez a CSP-generátorral készíthető, az egész készlet pedig a biztonsági fejlécellenőrzőn auditálható.
Hogyan ellenőrzik a Set-Cookie attribútumait? Az RFC 6265 szerint: a nevet és az értéket az első egyenlőségjelnél vágják szét, az attribútumok az első pontosvesszőtől következnek, az Expires-nek a süti formátumában dátumnak kell lennie, a Max-Age számjegyekből áll, a SameSite pedig Strict/Lax/None egyike — a NoneSecure nélkül pedig a mai böngészők elutasítják, ezért ezt külön jelezzük.
Csak egy fejlécsor-lista elemezhető? Igen — a Csak fejlécblokk lehetőség választandó, és kezdősor nélkül illeszthető be. Az irány-ellenőrzések enyhébbek; minden más (szerkezet, Set-Cookie, paraméterek) továbbra is fut.