🔹 Full Line
resp.headers["Cache-Control"] = "no-store"
resp
→ What is it?resp
is your HTTP response object.
Earlier in your code, you defined:
resp = templates.TemplateResponse("index.html", {"request": request})
That means:
resp
contains the HTML content (from index.html
)
Plus all HTTP metadata (status code, headers, cookies, etc.)
.headers
→ What is it?Every HTTP response includes headers — small pieces of metadata that tell the browser how to handle the response.
Examples of common headers:
Header | Meaning |
---|---|
Content-Type |
Type of data (text/html , application/json , etc.) |
Content-Length |
Size of the response |
Set-Cookie |
Sends cookies to the browser |
Cache-Control |
Controls caching behavior |
So resp.headers
is just a dictionary-like object that stores these headers.
"Cache-Control"
→ What is it?This header controls how browsers (and proxies) cache the content of the page.
It tells the browser whether it should store a copy of the page locally — so next time, it can load it faster without re-downloading it.
"no-store"
→ What it meansno-store
is a directive that tells the browser:
❌ “Do NOT store any part of this page — neither in memory cache nor on disk.”
In other words:
Every time the user opens the page, the browser must request it fresh from the server.
Nothing should be saved locally.
Here’s why this is important:
Scenario | Why “no-store” is useful |
---|---|
🔄 Development mode | You keep updating your frontend files (HTML, CSS, JS) and don’t want the browser to show old cached versions. |
🔐 Sensitive data | For login pages, dashboards, or banking portals — you don’t want private info stored in browser cache. |
📊 Dynamic UI | For dashboards or pages where data changes frequently (e.g., stock price, patient info). |
Without this line, the browser might cache the HTML file (and possibly the linked static files).
That means:
After updating your page, the browser could show an old version.
A user pressing “Back” might see outdated or sensitive info from cache.
Let’s say your FastAPI homepage shows live analytics.
Without this:
resp.headers["Cache-Control"] = "no-store"
When a user revisits the page, their browser might show yesterday’s chart — because it loaded from cache.
With this line:
✅ The browser always asks the server for the latest version.
Cache-Control
OptionsDirective | Meaning |
---|---|
no-store |
Do not cache at all |
no-cache |
Cache allowed but must revalidate with the server first |
max-age=3600 |
Cache for 1 hour |
public |
Cache allowed by any cache (browser or proxy) |
private |
Cache only allowed by browser, not proxy servers |
Example:
resp.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
This is often used for extra safety — it disables caching and forces revalidation.
Part | Meaning |
---|---|
resp |
The HTTP response object returned to the browser |
.headers |
Metadata dictionary for the response |
"Cache-Control" |
Header controlling caching |
"no-store" |
Prevents any caching by browser or proxy |
✅ Purpose | Ensures always-fresh, secure, and updated page loading |
When you log out of an online banking portal and click “Back”,
you should not see your account summary again — even from cache.
That’s exactly why developers add:
resp.headers["Cache-Control"] = "no-store"