当前位置: 首页 > news >正文

缓存控制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

实现原理

  1. Cache-Control: no-store
    禁止任何缓存(包括浏览器和中间代理)
  2. Cache-Control: no-cache
    每次请求必须向服务器验证(即使有缓存)
  3. Cache-Control: must-revalidate
    缓存过期后必须重新验证
  4. Pragma: no-cache(HTTP/1.0 向后兼容)
  5. 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
...

关键注意事项

  1. no-store 优先级最高
    该指令会完全禁用缓存,使其他缓存指令失效
  2. 浏览器兼容性
    Pragma: no-cache 确保兼容旧版 HTTP/1.0 客户端
  3. HTTPS 安全增强
    对敏感内容推荐强制使用 HTTPS 配合缓存控制
  4. 中间代理
    部分 CDN/代理可能忽略这些头部,需额外配置

此配置适用于:登录页面、支付表单、实时数据等需要绝对最新内容的场景。对于静态资源请勿使用此配置,会显著增加服务器负载。

http://www.lqws.cn/news/125965.html

相关文章:

  • Java高级 | 【实验四】Springboot 获取前端数据与返回Json数据
  • QT开发技术【ffmpeg + QAudioOutput】音乐播放器
  • 前端判断内容文字是否溢出容器,创建临时元素来模拟文本实际宽度
  • Windows 12确认没了,Win11 重心偏移修Bug
  • kubernetes》》k8s》》kubectl proxy 命令后面加一个
  • Python爬虫实战:研究urlparse库相关技术
  • 艾利特协作机器人:重新定义工业涂胶场景的精度革命
  • 第5篇《中间件负载均衡与连接池管理机制设计》
  • HDFS分布式存储 zookeeper
  • 42、响应处理-【源码分析】-浏览器与PostMan内容协商完全适配
  • 第二章 2.2 数据存储安全风险之数据存储风险分析
  • flask功能使用总结和完整示例
  • MVCC理解
  • 证券交易柜台系统解析与LinkCounter解决方案开发实践
  • NLP学习路线图(二十三):长短期记忆网络(LSTM)
  • 2025最新Java日志框架深度解析:Log4j 2 vs Logback性能实测+企业级实战案例
  • Appium+python自动化(八)- 认识Appium- 下章
  • 【leetcode】9. 回文数
  • 如何通过RL真正提升大模型的推理能力?NVIDIA提出长期强化学习训练框架ProRL
  • 内网穿透之Linux版客户端安装(神卓互联)
  • K8S主机漏洞扫描时检测到kube-服务目标SSL证书已过期漏洞的一种永久性修复方法
  • Python IP可达性检测脚本解析
  • 蓝桥杯17114 残缺的数字
  • NPOI操作EXCEL文件 ——CAD C# 二次开发
  • 【Linux】Linux 环境变量
  • [3-02-01].第13节:三方整合 - Jedis客户端操作Redis
  • 【游戏科学】游戏开发中数学算法的核心与应用
  • 四款主流物联网操作系统(FreeRTOS、LiteOS、RT-Thread、AliOS)的综合对比分析
  • 依赖注入的注解
  • IDEA中微服务指定端口启动