Service Worker: Versionsnummer in der Adresse gegen fremden Cache

Bei der Fehlersuche zur lahmgelegten App kam ein zweiter, aelterer
Mangel zum Vorschein.

GEMESSEN

  Dienst selbst    Cache-Control: no-cache
  nach Cloudflare  Cache-Control: max-age=14400  (auch bei MISS)

Cloudflare ersetzt die Vorgabe des Servers durch vier Stunden. Ursache
ist eine feste "Browser Cache TTL" in den Einstellungen. Der Kommentar
in server/index.js behauptet das Gegenteil ("Cloudflare respektiert
laut Doku ein vom Origin gesetztes Cache-Control") -- fuer diese Domain
stimmt das nicht. Nachgemessen, nicht vermutet.

WARUM DAS MEHR ALS EIN SCHOENHEITSFEHLER IST

Jede Aenderung am Service Worker erreicht die Geraete bis zu vier
Stunden zu spaet. Solange alles laeuft, faellt das nicht auf. Ist der
ausgelieferte Stand aber fehlerhaft -- wie heute, als eine zu strenge
Inhaltsrichtlinie ihn lahmlegte und die App "Keine Verbindung" zeigte
--, sind es vier Stunden, in denen sich nichts reparieren laesst.
Genau dann, wenn Tempo zaehlt, ist man am langsamsten.

LOESUNG OHNE FREMDE EINSTELLUNGEN

Die Registrierung laedt jetzt "/webdesign/sw.js?v=56". Aendert sich die
Nummer, ist es eine andere Adresse -- dafuer kann kein Zwischenspeicher
einen alten Stand haben. Die Nummer wird zusammen mit CACHE_NAME
hochgezaehlt; beide gehoeren zusammen und stehen jetzt auf 56.

Das wirkt unabhaengig davon, wie Cloudflare eingestellt ist. Die
Einstellung selbst sollte trotzdem geprueft werden -- sie betrifft auch
CSS und JavaScript.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-08-26 14:43:45 +02:00
co-authored by Claude Opus 5
parent c591925342
commit 0f253df134
2 changed files with 24 additions and 2 deletions
+23 -1
View File
@@ -815,8 +815,30 @@
// Über file:// gibt es keine Service Worker — dort gar nicht erst versuchen.
if (!/^https?:$/.test(location.protocol)) return;
window.addEventListener("load", function () {
/* Die Versionsnummer in der Adresse ist kein Schmuck, sondern die
Umgehung eines Zwischenspeichers, den wir nicht steuern.
Gemessen am 26.08.2026: Der Server liefert sw.js mit
"Cache-Control: no-cache" aus. Cloudflare ersetzt das durch
"max-age=14400" -- vier Stunden, und zwar auch bei einem
Fehlschlag im eigenen Zwischenspeicher (cf-cache-status: MISS).
Ursache ist eine feste "Browser Cache TTL" in den
Cloudflare-Einstellungen; die Annahme im Kopf von
server/index.js, ein gesetztes Cache-Control werde respektiert,
trifft fuer diese Domain nicht zu.
Folge: Jede Aenderung am Service Worker erreicht die Geraete bis
zu vier Stunden zu spaet. Bei einem fehlerhaften Stand -- wie an
diesem Tag, als eine zu strenge Inhaltsrichtlinie ihn lahmlegte
und die App "Keine Verbindung" zeigte -- sind das vier Stunden,
in denen sich nichts reparieren laesst.
Mit der Versionsnummer ist es eine ANDERE Adresse, sobald sie
sich aendert. Ein Zwischenspeicher kann dafuer keinen alten
Stand haben. Die Nummer wird zusammen mit CACHE_NAME in sw.js
hochgezaehlt -- beide gehoeren zusammen. */
navigator.serviceWorker
.register("/webdesign/sw.js", { scope: "/webdesign/" })
.register("/webdesign/sw.js?v=56", { scope: "/webdesign/" })
.catch(function () { /* still schlucken: ohne SW funktioniert alles weiter */ });
});
}
+1 -1
View File
@@ -34,7 +34,7 @@
Start alle alten Zwischenspeicher weg. Muss bei jeder Änderung an den
Dateien unten hochgezählt werden, sonst hängen Nutzer auf einem alten
Stand fest. */
const CACHE_NAME = "dogfather-webdesign-v55";
const CACHE_NAME = "dogfather-webdesign-v56";
/* Bausteine, die die Oberfläche zum Anzeigen braucht. Bewusst KEINE
HTML-Datei in dieser Liste. */