From 0f253df1347b0565b38fe1dd31c48c1a5d0f4729 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Wed, 26 Aug 2026 14:43:45 +0200 Subject: [PATCH] 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 --- assets/js/wd-core.js | 24 +++++++++++++++++++++++- webdesign/sw.js | 2 +- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/assets/js/wd-core.js b/assets/js/wd-core.js index 72285187..a59b367b 100644 --- a/assets/js/wd-core.js +++ b/assets/js/wd-core.js @@ -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 */ }); }); } diff --git a/webdesign/sw.js b/webdesign/sw.js index cc4b58c2..40df5bd7 100644 --- a/webdesign/sw.js +++ b/webdesign/sw.js @@ -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. */