Analyzátor hlavičiek HTTP

Vloží sa celý blok HTTP požiadavky alebo odpovede — to, čo vypíše curl -v, alebo to, čo zobrazí panel Sieť v prehliadači — a každý riadok hlavičky sa dekóduje: názov, hodnota, veta prostým jazykom o tom, čo robí, a dokument, ktorý ho definuje. Set-Cookie sa rozloží atribút po atribúte (Secure, HttpOnly, SameSite, Max-Age, Expires…), parametre Content-Type a Accept sa rozvinú a blok sa skontroluje na klasické štrukturálne problémy: zastarané zalamované riadky, nepovolené znaky, duplicitné hlavičky a hlavičky odoslané v nesprávnom smere. Všetko beží v prehliadači a nič sa nenahráva.
Automaticky sa pozrie na prvý riadok: riadok požiadavky (GET /path HTTP/1.1) znamená požiadavku, stavový riadok (HTTP/1.1 200 OK) znamená odpoveď, všetko ostatné sa číta ako samotný blok hlavičiek. Ostatné voľby vynucujú smer, čo mení, ktoré upozornenia sa uplatnia.
Zatiaľ nič nebolo analyzované. Vloží sa blok požiadavky alebo odpovede vyššie a stlačí sa Analyzovať hlavičky, alebo sa stlačí Ukážka pre prepracovaný príklad.
Kde získať blok, ktorý stojí za analýzu. V termináli curl -v https://example.com/ 2>&1 vypíše požiadavku a odpoveď s predponami > a < — tie sa odstránia a vložia. curl -sI https://example.com/ dá iba blok hlavičiek odpovede. V prehliadači sa otvoria nástroje pre vývojárov, karta Sieť, znovu sa načíta stránka, vyberie sa požiadavka na dokument a použije sa Kopírovať → Kopírovať hlavičky odpovede; pre stranu požiadavky sa použije Kopírovať ako cURL a prečítajú sa prepínače. Aj obyčajný blok riadkov Názov: hodnota bez počiatočného riadku sa analyzuje — kontroly smeru sa potom zmiernia.
Autotest
Znova spustí analyzátor nad pevnými blokmi: rozpoznanie smeru, obe ukážkové skupiny, každé pravidlo atribútov Set-Cookie (SameSite=None bez Secure, nečíselný Max-Age, pokazený Expires, neznámy atribút, cookie bez znaku rovnosti), spájanie obs-fold, nepovolené názvy polí, duplicitné hlavičky, nesúlad smeru a záporné cesty. Nič sa nikam neodosiela.
Čo je hlavička HTTP?
Jednou vetou: správa HTTP je počiatočný riadok, blok riadkov Názov: hodnota nazývaných hlavičky, prázdny riadok a voliteľné telo — hlavičky nesú všetko o správe okrem samotného tela: kto ju poslal, čo môže prijať, ako sa ukladá do medzipamäte, ako sa autentifikuje a čo odosielateľ očakáva späť.
Štyri rodiny
RodinaPutuje soPríkladyOdpovedá na otázku
Hlavičky požiadaviekklient → serverHost, Accept, Cookie, Referer, Authorizationčo klient chce a za koho sa vydáva
Hlavičky odpovedeserver → klientLocation, Server, Set-Cookie, Retry-Afterčo server urobil a čo na oplátku žiada
Hlavičky reprezentácieobe strany, o teleContent-Type, Content-Length, Content-Encoding, ETagv akom formáte je telo a ktorá kópia to je
Riadiace hlavičkyobe strany, o spojeníCache-Control, Connection, Via, Transfer-Encodingako sa správa a spojenie spracúvajú na ceste

Niektoré hlavičky sú striktne jednosmerné: If-None-Match dáva zmysel iba v požiadavke a Set-Cookie iba v odpovedi. Analýza v nesprávnom smere je jedna z klasických chýb pri ladení kopírovaním, preto to táto stránka označuje.

Gramatika riadka hlavičky

RFC 9110 definuje riadok poľa ako field-name ":" OWS field-value OWS — názov tvorený iba znakmi tokenu (písmená, číslice a !#$%&'*+-.^_`|~), dvojbodka bez medzery pred ňou a hodnota z viditeľných znakov, medzier a tabulátorov. Názvy hlavičiek nerozlišujú veľkosť písmen (content-type sa rovná Content-Type); hodnoty sú takmer vždy citlivé na veľkosť písmen. Riadok začínajúci medzerou alebo tabulátorom pokračoval v predchádzajúcej hlavičke — obs-fold, zastaraný od roku 2014: proxy, ktorý ho rozbalí, môže zmeniť význam hlavičky, preto ho tu analyzátor spojí, ale upozorní na to.

Časté chyby
  • Dôvera v X-Forwarded-For. Pridáva ho každý proxy na ceste a klient môže sfalšovať prvý skok. Hovorí, čo tvrdí reťaz proxy, nie kto je pripojený; ide o nápovedu, a najlepšie je proxy, ktoré ovládame a ktoré ju prepíše.
  • Čítanie iba hlavičiek odpovede. Polovica zaujímavých chýb (duplicitný Accept, chýbajúci Host, autorizačná hlavička namierená na nesprávneho hostiteľa) býva v požiadavke, ktorú prehliadač štandardne skrýva. Na zobrazenie vlastnej požiadavky slúži Kopírovať ako cURL.
  • Zlučovanie riadkov Set-Cookie. Väčšinu duplicitných hlavičiek možno spojiť čiarkami — Set-Cookie sa spájať nesmie, pretože čiarka sa objavuje priamo v hodnote. Prehliadače každý riadok spracúvajú ako samostatný cookie.
  • Očakávanie, že Content-Length je veľkosť tela, ktorú sa napísalo. Je to veľkosť po aplikovaní Content-Encoding a iba vtedy, keď správa nie je rozdelená na časti; odpoveď Transfer-Encoding: chunked nemá zmysluplnú jedinú dĺžku.
  • Posudzovanie hlavičiek podľa predpony X-. Konvencia zanikla v RFC 6648: X-Forwarded-For a X-Content-Type-Options sú trvalé de facto štandardy, zatiaľ čo mnohé hlavičky bez X sú experimentálne. Posudzuje sa podľa definujúceho dokumentu, nie podľa predpony.
FAQ

Je bezpečné sem vložiť hlavičky? Analýza prebieha úplne v prehliadači a nič sa nenahráva. Skopírovaný blok hlavičiek je však odtlačok prstom: cookies, autorizačné hlavičky a presný User-Agent spoločne dokážu identifikovať osobu, preto sa analyzujú len bloky, ktoré by nevadilo ukázať kolegovi.

Prečo prehliadač zobrazuje hlavičky ako :status, ktoré táto stránka označuje za chyby? Sú to pseudohlavičky HTTP/2 a HTTP/3 — binárne rámcové vrstvy nahrádzajú počiatočný riadok a Host pseudopoľami. Táto stránka analyzuje klasický textový zápis HTTP/1.1; pseudohlavičky sú tá istá informácia po tom, ako ju protokol preložil.

Čo sa stalo s X-XSS-Protection? Je zastaraná: audítor, ktorý riadila, spôsoboval vlastné bezpečnostné chyby a prehliadače ju odstránili. Jej úloha patrí Content-Security-Policy — vytvorí sa v Generátore CSP a celá sada sa overí na kontrole bezpečnostných hlavičiek.

Ako sa kontroluje atribút Set-Cookie? Podľa RFC 6265: názvy a hodnoty sa rozdelia pri prvom znaku rovnosti, atribúty za prvou bodkočiarkou, Expires musí byť dátum vo formáte cookie, Max-Age číslice, SameSite jedna z hodnôt Strict/Lax/None — a None bez Secure aktuálne prehliadače odmietajú, preto sa to zvýrazní.

Dá sa analyzovať iba zoznam riadkov hlavičiek? Áno — zvolí sa Iba blok hlavičiek a vloží sa bez počiatočného riadku. Kontroly smeru sa zmiernia; všetko ostatné (štruktúra, Set-Cookie, parametre) sa stále spustí.