onlycodes

Nástroje

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.

Skupiny

Text a kódování

Zakódovat, porovnat, spočítat otisk.

Formáty dat

Zpřehlednit nebo rozebrat to, co si mezi sebou posílají programy.

Hlavičky HTTP

Rozebrat jednu hlavičku požadavku nebo odpovědi: co v ní smí stát a co z toho pro druhou stranu plyne.

Content-Type

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.

Cache-Control (odpověď)

Prohlížeč a sdílená cache (CDN, proxy) počítají jinak. Tenhle nástroj počítá obojí zvlášť — a no-cache neznamená „necachovat“.

Content-Disposition

Když jsou filename a filename* oba, vyhrává filename* — a to je přesně to, co se plete.

Cache-Control (požadavek)

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.

Accept

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.

ETag

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.

Range

bytes=0-499 je 500 bajtů — obě meze jsou včetně. Tenhle nástroj existuje hlavně kvůli téhle jedné jedničce.

Chunked

Velikost kousku je šestnáctkově: 10 je šestnáct bajtů, ne deset. Tenhle nástroj existuje hlavně kvůli té jedné záměně.

Link

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(',').

Forwarded

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.

User-Agent

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.

Accept-Language

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í.

Sec-CH-UA

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.

Set-Cookie

Domain platnost rozšíří na subdomény, ne zúží — a Path se neporovnává jako prefix řetězce, ale po složkách.

Vary

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.

CSP

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.

HSTS

Hlavička poslaná přes http:// se celá ignoruje (RFC 6797 8.1) — a je to nejčastější důvod, proč „HSTS nefunguje“.

Retry-After

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.

RateLimit

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.

Čas

Razítka a plánování.

Čísla a sítě

Soustavy, bity, adresy a masky.

Ostatní

Co se jinam nevešlo.