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:
+23
-1
@@ -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
@@ -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. */
|
||||
|
||||
Reference in New Issue
Block a user