CV laden
Zurück zu Business Cases

Cloudflare

Edge-HTML, das das Locale-Cookie ignorierte

Cloudflare cachte das erste HTML zur URL. Ein de-Besucher bekam ru-Markup. Vue hydrierte die falsche Sprache und navigierte.

Origin war nginx, php, Vue SSR, MySQL. Cloudflare saß vorn für TLS und statische Assets. Jemand schaltete Cache Everything auf HTML. Der Cache-Key war die URL. Locale lebte in einem Cookie. Der erste Crawler wollte Russisch. Deutschland bekam dieses Dokument eine Minute.

Hydration sah lang=ru im HTML und eine de-Präferenz im Client. Die Seite blitzte. Eingeloggte mit auth_token bekamen manchmal ein öffentliches Fragment, weil die Edge dieses Cookie nicht umging.

Das Problem war HTML an der Edge nur nach Pfad. Ein de-Besucher bekam ru-Markup. Ein Eingeloggter konnte ein öffentliches Fragment bekommen. Locale in den Key oder kein HTML-Cache, und Bypass auf auth_token.

Eine URL, drei Locales. Ein Edge-Key ohne Locale ist das falsche Dokument.
Eine URL, drei Locales. Ein Edge-Key ohne Locale ist das falsche Dokument.

Was die Edge cachen darf

Statische Assets bei Cloudflare bleiben. HTML umgeht den Cache oder der Key enthält Locale, und Requests mit auth_token überspringen die Edge. nginx hatte schon einen Zwei-Sekunden-Microcache mit dieser Regel. HTML-Cache ohne Key zu duplizieren kämpft gegen den Origin.

Bypass bei auth_token. Locale im Key, oder kein HTML an der Edge. Origin-nginx behält den kurzen Microcache.
Bypass bei auth_token. Locale im Key, oder kein HTML an der Edge. Origin-nginx behält den kurzen Microcache.

DNS ohne geratene Seiten

Cloudflare bleibt DNS und TLS. Der Vorfall war HTML. Die Katalogliste ist locale-spezifisches SSR. Behandle sie wie eine Cookie-API, nicht wie ein PNG. Origin bleibt die Quelle des Dokuments. Die Edge darf eine Minute falsch liegen, wenn der Key nur der Pfad ist.

Was ich daraus mitnehme

Cache Everything auf SSR-HTML ist die falsche Sprache, bis der Key Locale enthält. Eine PNG-Regel ist keine Seitenregel.

auth_token muss die Edge umgehen. Öffentliches HTML im Slot eines Eingeloggten ist dieselbe Leak-Klasse wie der nginx-Microcache-Fall auf dieser Site.

Origin hatte schon einen Zwei-Sekunden-Microcache mit dem richtigen Key. Ein zweiter HTML-Cache ohne diesen Key macht ihn kaputt.

Zurück zu Business Cases