From 76a8fc0806822f0468b83f516645a4f4d149b9f8 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 22 Oct 2026 06:06:04 +0200 Subject: [PATCH] =?UTF-8?q?Browser=20l=C3=A4dt=20nach=20Updates=20immer=20?= =?UTF-8?q?die=20aktuelle=20Oberfl=C3=A4che=20(Cache-Control:=20no-cache)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sonst blieb nach einem Update die alte app.js im Cache: neue Buttons sichtbar, aber ohne Funktion. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01X48pE4bzjHej8w9HyZXCjb --- trainpulse/server.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/trainpulse/server.py b/trainpulse/server.py index 870b34c..f986fb8 100644 --- a/trainpulse/server.py +++ b/trainpulse/server.py @@ -158,6 +158,16 @@ async def lifespan(app): app = FastAPI(lifespan=lifespan, docs_url=None, redoc_url=None) +@app.middleware("http") +async def no_stale_frontend(request: Request, call_next): + # Nach einem Update sonst alte app.js aus dem Browser-Cache; mit no-cache fragt der Browser + # jedes Mal kurz nach (304, wenn unverändert). Kacheln dürfen normal gecacht werden. + resp = await call_next(request) + if not request.url.path.startswith(("/tiles/", "/api/")): + resp.headers["Cache-Control"] = "no-cache" + return resp + + @app.get("/api/vehicles") def vehicles(request: Request): headers = {"Cache-Control": "no-store", "X-Now": str(time.time())} # für den Uhrenabgleich im Browser