Use Cache-Control: no-store for responses that contain credentials, tokens, personal data, or other material that must not be written to disk or shared caches. Apply it to authentication pages and sensitive API responses, and verify intermediaries do not override it, because cached secrets can persist on client devices and proxies.
What no-store is doing, and what it is not doing
Cache-Control: no-store tells browsers, shared caches, and intermediaries not to write the response body to persistent storage. That makes it the right control for anything that should not survive beyond the immediate exchange, including authenticated content, one-time secrets, and pages that expose personal or session material. It is stronger than simply discouraging reuse, because it aims to prevent retention altogether.
It helps most when the response itself is sensitive, not just the underlying endpoint. If the body contains credentials, tokens, account data, or recovery links, no-store reduces the chance of later retrieval from disk, browser cache, reverse proxies, or other shared caching layers. Security Headers Guide is a useful companion for placing no-store alongside the rest of the header set that protects sensitive web responses.
The limitation is that no-store is a response handling instruction, not a full confidentiality guarantee. It does not stop every form of capture, such as screenshots, endpoint compromise, traffic interception on a broken channel, or server-side logging of the secret before the header is applied. That is why no-store should be paired with secure transport, careful logging, and disciplined secret handling at the application layer.
Where to apply no-store in practice
Use no-store on authentication flows, password reset pages, account recovery steps, token delivery screens, and sensitive API responses that return bearer material or personal data. If a response contains something that would be dangerous to leave behind on a device or in a proxy cache, treat it as a no-store candidate by default. This is especially important for pages that display a secret only once, because that is often the exact moment a cache would create unnecessary exposure.
Be consistent across the whole response path. A common mistake is to protect the main HTML document but allow embedded JSON, image, or redirect responses to remain cacheable. Another is to rely on application code alone while a CDN, proxy, or browser extension may apply different caching behavior. If the sensitivity is high, review the full set of cache directives, not only no-store, so that every hop receives the same intent.
For API design, the key question is whether the response carries reusable sensitive material. A profile summary may not need no-store, but a token exchange response, passwordless login result, or account recovery payload usually does. When the response is meant to be read once and then discarded, cacheability is usually a liability rather than a performance benefit. API Key Management Guide is relevant where the sensitive payload includes bearer credentials or other secret material that should not persist beyond delivery.
How to verify that caches are not defeating the control
After setting no-store, test the actual delivery path, not just the application code. Check browser behavior, intermediary headers, CDN rules, proxy configuration, and any security appliance that might rewrite cache directives. If a component can store or replay the response, you want proof that it respects the header and does not silently downgrade it.
Verification should include repeat navigation, back-button behavior, and inspection of shared cache settings where those are under your control. In practice, teams often discover that a sensitive response is being cached because the application framework defaults differ from the reverse proxy defaults, or because a performance optimization was added later without rechecking the header policy. When that happens, the safe response is to treat the override as a control failure until proven otherwise.
Audit Evidence and Continuous Controls Monitoring Guide fits this work because no-store is only reliable when you can demonstrate that the intended header is present and preserved over time. That means keeping evidence of configuration, testing, and exception handling rather than assuming the application will always emit the same response.
Risk and Threat Considerations
Sensitive responses become a data exposure problem when caches retain them longer than intended. The practical risk is not only that a browser may reuse a page, but that a proxy, shared workstation, or intermediary store may preserve credentials, personal data, or session-linked material after the user believes it is gone.
Failure mechanism: A response that should have been non-persistent is written to disk or retained by an intermediary, then later disclosed through local device access, shared infrastructure, misconfiguration, or unintended replay.
Impact: Cached secrets or sensitive account data can enable account takeover, unauthorized access, privacy exposure, or recovery of material that should have expired with the session.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP ASVS and NIST SP 800-53 Rev 5 set the technical controls, while ISO/IEC 27001:2022 defines the regulatory obligations.
| Framework | Control / Reference | Relevance |
|---|---|---|
| OWASP ASVS | V12 — Secure Communication | No-store is part of protecting sensitive web responses in transit and at the client boundary. |
| Recommendation — Enforce secure response handling for sensitive pages and APIs, including cache controls that prevent storage. | ||
| NIST SP 800-53 Rev 5 | SC-28 — Protection of Information at Rest | No-store reduces persistence of sensitive response data on devices and intermediaries. |
| Recommendation — Limit residual exposure of sensitive response data by preventing unnecessary storage at rest. | ||
| ISO/IEC 27001:2022 | A.8.24 — Use of cryptography | Cache controls support confidentiality handling for sensitive web content alongside cryptographic protections. |
| Recommendation — Protect sensitive responses with layered controls, including transport protection and careful caching rules. | ||
Practitioner Guidance
What to verify: Confirm that the sensitive response is not only marked no-store but also free of conflicting cache directives, proxy overrides, and application-level replay paths. Test the exact route that delivers the secret, not a simplified staging path, because many cache bugs show up only in production topology.
Common mistake: Teams often protect login pages but forget the adjacent API or redirect response that carries the real sensitive material. If the body includes a token, one-time code, or personal data, treat the whole response as non-cacheable unless you have a specific reason and evidence to do otherwise.
Practitioner takeaway: no-store is most effective when it is treated as an end-to-end delivery property, not a single header value. The control succeeds only when every layer that can store the response is aligned with the sensitivity of the content.
Related resources from NHI Mgmt Group
Deepen Your Knowledge
Free weekly newsletter
Subscribe to the NHI & AI Identity Journal
The latest on NHI and Agentic AI security – articles, research, breaches, news and events every week.
Bonus 33% off our NHI Course when you subscribe.
Reviewed and updated by the NHIMG editorial team on October 19, 2026.
NHI Mgmt Group — the #1 independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org