HTTP-headertolkare

Klistra in en hel HTTP-begäran eller ett helt svar — blocket curl -v skriver ut, eller det som webbläsarens nätverkspanel visar — så avkodas varje headerrad: namnet, värdet, en klartextmening om vad den gör och dokumentet som definierar den. Set-Cookie plockas isär attribut för attribut (Secure, HttpOnly, SameSite, Max-Age, Expires…), Content-Type- och Accept-parametrar expanderas, och blocket granskas för de klassiska strukturproblemen: föråldrade vikta rader, otillåtna tecken, dubbletter av headers och headers som skickas i fel riktning. Allt körs i webbläsaren och inget laddas upp.
Automatiskt tittar på första raden: en begärandrad (GET /sökväg HTTP/1.1) betyder begäran, en statusrad (HTTP/1.1 200 OK) betyder svar, allt annat läses som ett rent headerblock. De andra valen tvingar riktningen, vilket ändrar vilka varningar som gäller.
Inget tolkat än. Klistra in ett begäran- eller svarsblock ovan och tryck på Tolka headers, eller tryck på Exempel för ett genomarbetat exempel.
Var man hittar ett block som är värt att tolka. I en terminal skriver curl -v https://example.com/ 2>&1 ut begäran och svaret med >- och <-prefix — ta bort dem och klistra in. curl -sI https://example.com/ ger bara svarets headerblock. I webbläsaren öppnar man utvecklarverktygen, nätverksfliken, laddar om, väljer dokumentbegäran och använder Kopiera → Kopiera svarsheaders; för begäransidan används Kopiera som cURL och flaggorna läses. Ett rent block med Namn: värde-rader utan startrad tolkas också — riktningskontrollerna lättas då upp.
Självtest
Kör tolken igen mot fasta block: riktningsdetektering, båda exempelpoolerna, varje Set-Cookie-attributregel (SameSite=None utan Secure, ett icke-numeriskt Max-Age, ett trasigt Expires, ett okänt attribut, en cookie utan likhetstecken), obs-fold-sammanfogning, otillåtna fältnamn, dubbletter av headers, riktningsmissmatchningar och de negativa vägarna. Inget skickas någonstans.
Vad är en HTTP-header?
På en mening: ett HTTP-meddelande är en startrad, ett block av Namn: värde-rader som kallas headers, en tom rad och en valfri body — headers bär allt om meddelandet utom själva bodyn: vem som skickade det, vad det kan ta emot, hur det cachas, hur det autentiseras och vad avsändaren vill få tillbaka.
De fyra familjerna
FamiljFärdas påExempelBesvarar frågan
Begäransheadersklient → serverHost, Accept, Cookie, Referer, Authorizationvad klienten vill och vem den påstår sig vara
Svarsheadersserver → klientLocation, Server, Set-Cookie, Retry-Aftervad servern gjorde och vad den begär tillbaka
Representationsheadersbåda, om bodynContent-Type, Content-Length, Content-Encoding, ETagvilket format bodyn har och vilken kopia av den det här är
Kontrollheadersbåda, om anslutningenCache-Control, Connection, Via, Transfer-Encodinghur meddelandet och anslutningen hanteras på vägen

Vissa headers är helt enkelriktade: If-None-Match har bara mening i en begäran och Set-Cookie bara i ett svar. Att tolka åt fel håll är ett av de klassiska felsökningsmisstagen vid kopiera-klistra, vilket är anledningen till att den här sidan flaggar det.

Grammatiken för en headerrad

RFC 9110 definierar en fältrad som field-name ":" OWS field-value OWS — ett namn som bara består av tokentecken (bokstäver, siffror och !#$%&'*+-.^_`|~), ett kolon med inget mellanslag före det, och ett värde av synliga tecken, mellanslag och tabbar. Headernamn är skiftlägesokänsliga (content-type är detsamma som Content-Type); värden är nästan alltid skiftlägeskänsliga. En rad som börjar med mellanslag eller tabb fortsatte den föregående headern tidigare — obs-fold, föråldrad sedan 2014: en proxy som packar upp den kan ändra headerns betydelse, så tolkaren här sammanfogar den men varnar för att den finns.

Vanliga misstag
  • Att lita på X-Forwarded-For. Den läggs till av varje proxy på vägen, och en klient kan förfalska det första hoppet. Den berättar vad en kedja av proxyservrar påstår, inte vem som är ansluten; behandla den som en ledtråd, och föredra en proxy som kontrolleras internt och som skriver över den.
  • Att bara läsa svarsheaders. Hälften av de intressanta misstagen (en dubblerad Accept, en saknad Host, en auktoriseringsheader riktad mot fel värd) finns i begäran, som webbläsaren döljer som standard. Använd Kopiera som cURL för att se sin egen.
  • Att slå ihop Set-Cookie-rader. De flesta dubblerade headers får kombineras med kommatecken — Set-Cookie får inte, eftersom kommatecknet förekommer inuti själva värdet. Webbläsare behandlar varje rad som en separat cookie.
  • Att förvänta sig att Content-Length är den bodystorlek man skrev. Det är storleken efter att Content-Encoding tillämpats och bara när meddelandet inte är chunkat; ett svar med Transfer-Encoding: chunked har ingen meningsfull enskild längd.
  • Att bedöma headers efter deras X--prefix. Konventionen dog i RFC 6648: X-Forwarded-For och X-Content-Type-Options är permanenta de facto-standarder, medan många headers utan X är experimentella. Bedöm efter det definierande dokumentet, inte prefixet.
Vanliga frågor

Är det säkert att klistra in headers här? Tolkningen sker helt i webbläsaren och inget laddas upp. Men ett kopierat headerblock är ett fingeravtryck: cookies, auktoriseringsheaders och den exakta User-Agenten kan tillsammans identifiera en, så tolka bara block som man inte skulle ha något emot att visa för en kollega.

Varför visar min webbläsare headers som :status som den här sidan kallar fel? Det är HTTP/2- och HTTP/3-pseudoheaders — de binära ramlagren ersätter startraden och Host med pseudofält. Den här sidan tolkar den klassiska HTTP/1.1-textströmmen; pseudoheaders är samma information efter att protokollet översatt den.

Vad hände med X-XSS-Protection? Den är utfasad: granskaren den styrde orsakade egna säkerhetsbuggar och webbläsare tog bort den. Dess uppgift hör hemma i en Content-Security-Policy — bygg en på CSP-generatorn och granska hela uppsättningen på kontrollen av säkerhetsheaders.

Hur kontrolleras ett Set-Cookie-attribut? Mot RFC 6265: namn och värden delas vid första likhetstecknet, attribut efter första semikolonet, Expires måste vara ett datum i cookieformatet, Max-Age är siffror, SameSite är en av Strict/Lax/None — och None utan Secure avvisas av aktuella webbläsare, så det markeras.

Kan man tolka bara en lista med headerrader? Ja — välj Endast headerblock och klistra in utan startrad. Riktningskontrollerna lättas upp; allt annat (struktur, Set-Cookie, parametrar) körs fortfarande.