INNER CODE UNIT · Python
no_html_cache
canarybyte/veridrop · web/server.py:41
async def no_html_cache(request: Request, call_next):
"""Prevent browsers from caching HTML responses.
HTML pages reference versioned CSS/JS via ?v=N query strings, but the
cache-bust only works if the browser refetches the HTML in the first place.
Without an explicit Cache-Control, browsers apply a heuristic that can hold
HTML for hours — making style/template iterations invisible to returning
visitors. `no-cache` (NOT no-store) lets the browser keep a copy but
forces revalidation against the server every time, so updates appear
immediately while still serving 304s for unchanged pages.
"""
response = await call_next(request)
ctype = response.headers.get("content-type", "")
if ctype.startswith("text/html"):
response.headers["Cache-Control"] = "no-cache, must-revalidate"
return response