缓存控制HTTP标头设置为“无缓存、无存储、必须重新验证”
文章目录
- 说明
- 示例
- 核心响应头设置
- 实现原理
- 代码实现
- 1. 原生 Node.js (使用 `http` 模块)
- 2. Express 框架
- 3. 针对特定路由设置 (Express)
- 验证方法(使用 cURL)
- 关键注意事项
说明
日期:2025年6月4日。
对于安全内容,请确保缓存控制HTTP标头设置为“no-cache, no-store, must-revalidate”(无缓存、无存储、必须重新验证)。如果应该缓存资产,请考虑将指令设置为“public、max-age、imtable”。
示例
日期:2025年6月4日。
操作系统:ubuntu server v24.04.2 amd64。
应用:
- node.js v22.15.1
- npm v11.4.1
- express(node.js的模块) v5.1.0
直接添加全局中间件设置即可。
const express = require('express');
const app = express();app.use((req, res, next) => {res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate');res.setHeader('Pragma', 'no-cache');res.setHeader('Expires', '0');next();
});
在 Node.js 应用中设置缓存控制 HTTP 标头为 “无缓存、无存储、必须重新验证”,需组合多个响应头以实现严格缓存控制。以下是具体实现方法和代码示例:
核心响应头设置
Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Expires: 0
实现原理
Cache-Control: no-store
禁止任何缓存(包括浏览器和中间代理)Cache-Control: no-cache
每次请求必须向服务器验证(即使有缓存)Cache-Control: must-revalidate
缓存过期后必须重新验证Pragma: no-cache
(HTTP/1.0 向后兼容)Expires: 0
(设置资源立即过期)
代码实现
1. 原生 Node.js (使用
http
模块)const http = require('http');const server = http.createServer((req, res) => {// 设置无缓存响应头res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate');res.setHeader('Pragma', 'no-cache');res.setHeader('Expires', '0');// 业务响应res.end('This content is never cached'); });server.listen(3000);
2. Express 框架
const express = require('express'); const app = express();// 全局中间件设置 app.use((req, res, next) => {res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate');res.setHeader('Pragma', 'no-cache');res.setHeader('Expires', '0');next(); });// 路由示例 app.get('/', (req, res) => {res.send('This page is never cached'); });app.listen(3000);
3. 针对特定路由设置 (Express)
app.get('/sensitive-data', (req, res) => {res.set({'Cache-Control': 'no-store, no-cache, must-revalidate','Pragma': 'no-cache','Expires': '0'});res.send('Sensitive data without caching'); });
验证方法(使用 cURL)
curl -I http://localhost:3000
预期响应头:
HTTP/1.1 200 OK Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Expires: 0 ...
关键注意事项
no-store
优先级最高
该指令会完全禁用缓存,使其他缓存指令失效- 浏览器兼容性
Pragma: no-cache
确保兼容旧版 HTTP/1.0 客户端- HTTPS 安全增强
对敏感内容推荐强制使用 HTTPS 配合缓存控制- 中间代理
部分 CDN/代理可能忽略这些头部,需额外配置此配置适用于:登录页面、支付表单、实时数据等需要绝对最新内容的场景。对于静态资源请勿使用此配置,会显著增加服务器负载。