要彻底禁用浏览器缓存敏感接口数据,需组合设置cache-control: no-store, no-cache, must-revalidate, private、pragma: no-cache和expires: 0,并精准作用于敏感路径如/api/payment/notify,避免影响静态资源缓存。

要让浏览器不缓存敏感接口数据,关键不是简单加 no-cache,而是组合使用多个响应头,彻底阻断本地和中间代理的存储行为。
为什么单用 no-cache 不够
no-cache 只表示“每次用前必须校验”,浏览器仍会把响应体存进磁盘或内存缓存,只是下次请求时多发一次 If-None-Match 或 If-Modified-Since 校验。对登录态、支付结果、个人资料等敏感内容,这存在泄露风险。
真正禁用本地缓存的完整头配置
在对应 location 块中添加以下三行:
-
Cache-Control: no-store, no-cache, must-revalidate, private
—no-store是核心:禁止任何设备(浏览器、CDN、代理)写入任何缓存文件;private确保即使误配也不会被共享缓存保留 -
Pragma: no-cache
— 兼容 HTTP/1.0 客户端(如老旧内网系统),虽已过时但仍有实际作用 -
Expires: 0
— 设置绝对过期时间为 1970 年 1 月 1 日,作为兜底项,尤其对不支持Cache-Control的极简客户端有效
只对敏感接口生效,不误伤静态资源
不要放在 http 或 server 全局块,应精准作用于路径,例如:
- 支付回调:
location /api/payment/notify { ... } - 用户凭证接口:
location ~ ^/api/(user|auth)/ { ... } - 后台管理页:
location /admin/ { ... }
这样 JS/CSS/图片等静态资源仍可走强缓存,不影响性能。
额外加固建议
针对高敏场景,还可补充:
- 响应头加
Vary: Cookie,避免不同用户因共享缓存而看到他人数据 - 后端返回时设置
Set-Cookie的HttpOnly和Secure属性,防止 XSS 窃取 - 前端在敏感页面 JS 中调用
history.replaceState()避免用户点后退时从内存缓存读取旧响应











