Statische Dateien: JS/CSS revalidieren statt blind cachen
express.static setzte kein Cache-Control, also legte der Browser die Lebensdauer selbst fest (heuristisch, aus dem Alter der Datei). Folge: nach einem Deploy lief die Oberflaeche im offenen Tab weiter mit dem alten chat.js - die frisch ausgelieferten Tabellen wurden dort weiter als Pipe-Wueste gerendert, obwohl der Server die neue Datei schon hatte. no-cache heisst nicht "nicht cachen": der Browser behaelt die Datei, fragt aber per ETag nach, ob sie noch gilt (304, kein erneuter Download). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -135,7 +135,16 @@ app.locals.safeUrl = function (url) {
|
||||
// Middleware
|
||||
app.use(express.json({ limit: '2mb' }));
|
||||
app.use(express.urlencoded({ extended: true, limit: '2mb' }));
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
// Statische Dateien. JS/CSS bekommen "no-cache": der Browser darf sie behalten,
|
||||
// muss aber jedes Mal per ETag nachfragen, ob sie noch aktuell sind (304, kein
|
||||
// erneuter Download). Ohne diesen Header setzt der Browser die Lebensdauer selbst
|
||||
// fest — nach einem Deploy lief die Oberfläche dann noch tagelang mit dem alten
|
||||
// chat.js weiter, obwohl der Server längst die neue Datei auslieferte.
|
||||
app.use(express.static(path.join(__dirname, 'public'), {
|
||||
setHeaders: (res, datei) => {
|
||||
if (/\.(js|css)$/i.test(datei)) res.setHeader('Cache-Control', 'no-cache');
|
||||
},
|
||||
}));
|
||||
|
||||
// Allow the browser extension (running on indeed.com) to call the import API.
|
||||
// Kept narrow: only the extension-facing endpoints need cross-origin access.
|
||||
|
||||
Reference in New Issue
Block a user