CV laden

DevOps

Gehashte Assets bleiben, die HTML-Shell nicht

JS und CSS mit Content-Hash bekommen ein langes max-age. Das Dokument, das auf diese Hashes zeigt, revalidiert nach jedem Deploy.

Ein gehashter Dateiname ist ein Vertrag. app.abc12.js ändert sich nie. nginx kann ein langes max-age und das immutable-Flag senden. Die HTML-Shell kann das nicht. Nach einem Deploy ist sie das einzige Dokument, das auf die neuen Hashes zeigt. Eine gecachte Shell mit gelöschten Dateien ist die leere Seite für wiederkehrende Besucher.

Fonts und Bilder nutzen jetzt dieselben langen Header. gzip läuft nur für Texttypen. Ein webp oder woff2 zu komprimieren verbrennt CPU ohne Gewinn.

Gehashte Assets sind immutable. Die HTML-Shell revalidiert nach jedem Deploy.
Gehashte Assets sind immutable. Die HTML-Shell revalidiert nach jedem Deploy.

Der Cookie-Bypass

Anonymes GET-HTML läuft zusätzlich durch einen kurzen nginx-Microcache. Der Key ist Scheme, Host, URI und Locale. Query-Strings ohne Einfluss auf die Seite gehören nicht in den Key. Requests mit auth_token umgehen diesen Cache. Ein eingeloggter Nutzer darf kein öffentliches Fragment bekommen.

JSON unter /api bleibt bei PHP. Ein API-Cache in nginx mischte eine Liste einer Locale mit einem Write aus einem anderen Tab.

Ein eingeloggter Request mit auth_token bekommt nie ein öffentliches Fragment.
Ein eingeloggter Request mit auth_token bekommt nie ein öffentliches Fragment.

Der Check nach dem Build

Seite laden. Prüfen dass die Shell revalidiert. Prüfen dass JS und CSS mit langem max-age kommen. Ein fehlendes Vite-Manifest ist schlimmer als ein 500. Die Seite rendert ohne CSS und sieht kaputt aus statt zu werfen.

Die Regel ist kurz. Gehashte Dateien sind immutable. Die HTML-Shell nicht. Cookies umgehen den gemeinsamen HTML-Cache. Das ist das nginx-Update auf dieser Site.

Zurück zu News