Každý na vlastní stránce, ať se dá poslat odkaz na ten jeden, který zrovna potřebujete. Všechno počítá prohlížeč — na server se neodesílá nic z toho, co do nich napíšete.
Zakódovat, porovnat, spočítat otisk.
Kóduje i dekóduje. Zvládá diakritiku i emoji (UTF-8).
Percent-encoding pro parametry v adrese.
Adresa na součástky. Parametry dotazu dekóduje po jednom, takže je vidět i to, co je zakódované dvakrát.
Jeden text, pět cílových zápisů vedle sebe. Apostrof v shellu a metaznaky uvnitř […] jsou místa, kde se to plete.
Otisk dvakrát: šestnáctkově a v base64. Do CSP a do integrity patří ta druhá podoba — a je to base64 ze syrových bajtů otisku, ne z toho šestnáctkového řetězce.
Nahoře původní, dole nový. Porovnává se po řádcích. Mezery na koncích řádků jde ignorovat.
Pozná znaky, které nejsou vidět nebo vypadají jako něco jiného. Běžná diakritika (á, č, ř) se nehlásí.
Výraz proti textu, živě: zvýrazněné nálezy, skupiny, náhrada i rozbor výrazu po částech. Na vlastní subdoméně hriste.onlycodes.cz.
Zpřehlednit nebo rozebrat to, co si mezi sebou posílají programy.
Zpřehlední, zabalí na jeden řádek, nebo řekne, kde je chyba.
Formátuje i zhušťuje. Chybu ohlásí i s tím, kde je.
Formátuje i zhušťuje. Není to parser — odsazení řídí klíčová slova.
Hlavička, obsah a časy v čitelné podobě. Podpis ověří veřejným klíčem (RS256, PS256, ES256 a jejich delší varianty). Token ani klíč nikam neodchází — počítá ho prohlížeč.
CSV na JSON i zpátky. Rozumí uvozovkám, takže čárka i zalomení řádku uvnitř buňky přežijí.
Verze 4, z kryptografického generátoru prohlížeče.
Konce řádků v těle musí být CRLF. Textové pole v prohlížeči je neudrží, takže se tu rozebírá podle LF — a délka se dopočítá pro obojí. Právě ten rozdíl bývá důvod, proč ručně složené tělo nesedí na Content-Length.
Rozebrat jednu hlavičku požadavku nebo odpovědi: co v ní smí stát a co z toho pro druhou stranu plyne.
Typ, podtyp, suffix a parametry zvlášť. Středník uvnitř uvozovek neodděluje — proto se to nedá rozdělit split(';'), a proto tenhle nástroj existuje.
Prohlížeč a sdílená cache (CDN, proxy) počítají jinak. Tenhle nástroj počítá obojí zvlášť — a no-cache neznamená „necachovat“.
Když jsou filename a filename* oba, vyhrává filename* — a to je přesně to, co se plete.
Tatáž slova, jiný význam. no-cache v odpovědi znamená „ulož, ale vždycky si to ověř“, v požadavku „neber to z mezipaměti“. A no-store v požadavku nezakazuje vydat to, co už uložené je.
Vybírá se podle specifičnosti, a teprve v rámci stejné specifičnosti podle q — takže text/*;q=0.5 přebije */*;q=1.
Pořadí není dané pořadím hlaviček v požadavku: If-Match se ptá první a If-None-Match přebíjí If-Modified-Since, ne naopak.
bytes=0-499 je 500 bajtů — obě meze jsou včetně. Tenhle nástroj existuje hlavně kvůli téhle jedné jedničce.
Velikost kousku je šestnáctkově: 10 je šestnáct bajtů, ne deset. Tenhle nástroj existuje hlavně kvůli té jedné záměně.
rel="next prefetch" jsou dvě relace k témuž cíli, ne jedna divně pojmenovaná. A čárka uvnitř <> hlavičku nedělí — na tom padá každý rozbor přes split(',').
Seznam se čte zprava. Vlevo stojí to, co napsal klient sám — a X-Forwarded-For: 198.51.100.23 si do požadavku připíše kdokoliv.
Mozilla/5.0 má na začátku skoro každý prohlížeč i skoro každý robot. Neznamená to nic — je to nános z roku 1994, který se nedá odstranit.
Shoda je nesouměrná: rozsah cs sedí na jazyk cs-CZ, ale rozsah cs-CZ na jazyk cs nesedí — leda se napřed zkrátí.
Jedna položka v seznamu je schválně nesmyslná a pořadí je schválně nahodilé — obojí proto, aby se kód nenaučil číst pevná jména.
Domain platnost rozšíří na subdomény, ne zúží — a Path se neporovnává jako prefix řetězce, ale po složkách.
Porovnání není porovnání bajtů: RFC 9111 4.1 dovoluje před ním ubrat mezery tam, kde to syntaxe hlavičky dovoluje — takže gzip, deflate a gzip,deflate se trefit smí, a mezipaměť, která srovnává bajty, je mine.
default-src je záloha jen pro fetch direktivy. base-uri, form-action ani frame-ancestors pod ni nespadají — politika default-src 'none' tedy pořád dovolí odeslat formulář kamkoliv.
Hlavička poslaná přes http:// se celá ignoruje (RFC 6797 8.1) — a je to nejčastější důvod, proč „HSTS nefunguje“.
Hlavička má dvě povolené podoby — počet sekund a HTTP datum — a kód, který ji čte, obvykle umí jen jednu. Druhá mu ale neprojde jako chyba: projde jako nesmyslné číslo.
X-RateLimit-Reset se posílá ve dvou podobách — jako počet sekund a jako unixové razítko — a žádná norma ten rozdíl nerozsuzuje. Klient si musí tipnout, a když tipne špatně, čeká 56 let, nebo vůbec.
Razítka a plánování.
Soustavy, bity, adresy a masky.
Soustava se pozná z předpony: 0x šestnáctková, 0b dvojková, 0o osmičková, bez předpony desítková. Jiný základ se zapíše jako 12#a5. Desetinná část se odděluje tečkou nebo čárkou (0b1101.101). Mezery a podtržítka se přeskakují.
Bere adresu s prefixem (198.51.100.130/26) i s maskou (198.51.100.130 255.255.255.192). Bez prefixu počítá /32. Umí i „leží tahle adresa v téhle síti?“ a „jaká nejmenší síť pokryje tyhle stroje?“.
Bere adresu s prefixem (2001:db8:abcd:12::1/64) i bez něj. Bez prefixu počítá /128.
Co se jinam nevešlo.
Náhodné heslo z crypto.getRandomValues, s odhadem entropie. Délku i znakové sady si zvolíte.
Napište barvu jakkoliv — #1d6f6a, rgb(29,111,106) nebo hsl(177,59%,27%). Kontrast se počítá podle WCAG 2.1.
Osmičkově (644, 4755) i symbolicky (rw-r--r--). Přijme i celou řádku z výpisu ls -l — vezme si z ní první sloupec.
Porovnává podle SemVer 2.0.0, takže 1.0.0-alpha.10 je novější než 1.0.0-alpha.2 a 1.0.0-rc.1 je starší než 1.0.0. Umí i rozsahy ^ ~ >= < a řazení seznamu.
Tři věci se pletou nejčastěji: 404 se smí uložit do cache i bez Cache-Control, 301 smí změnit POST na GET stejně jako 302, a tělo u 204 se nezahodí — přečte se jako začátek další odpovědi.