现代浏览器完全忽略,因其缓存决策由服务器响应头决定且发生在HTML解析前;真正有效的缓存控制必须通过服务端响应头设置Cache-Control并配合ETag实现协商缓存。

靠 meta 标签或只设 Expires 基本拦不住——它们要么被浏览器无视,要么因时钟偏差直接失效。真正能拦截无用请求的,只有服务端通过响应头发出的 Cache-Control 配合 ETag。
为什么 meta http-equiv 完全无效
Chrome、Firefox、Safari 全部忽略 。这不是兼容性问题,是规范层面不支持:HTML meta 只作用于文档解析阶段,而缓存决策发生在 HTTP 协议层,由响应头驱动。任何想靠前端代码“骗过”浏览器缓存的行为,都会在发起请求前就被跳过。
-
meta不参与任何真实网络请求流程,DevTools Network 面板里根本看不到它起作用 - CDN、反向代理(如 Nginx)、中间网关一律不读取 HTML 内容,只看响应头
- 构建工具(Vite/Webpack)注入的
meta更是纯装饰,对缓存零影响
Cache-Control 必须配 ETag 才算闭环
只设 Cache-Control: max-age=3600 能拦住 1 小时内的重复请求,但一过期就发完整请求,没解决“内容其实没变却重传”的问题。必须加 ETag,让过期后还能走协商缓存,用 304 Not Modified 拦下资源体传输。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
-
Last-Modified不够可靠:构建时文件时间戳重写、秒级精度导致内容未变却误判为更新 -
ETag应基于内容生成(如"sha256-a1b2c3..."),Nginx 默认开启,Apache 要确认没禁用FileETag - 分布式部署时,若各节点 ETag 生成逻辑不一致(比如用弱 ETag
W/"abc"),会导致协商失败,建议统一用强 ETag 或关闭
静态资源和 HTML 的缓存策略必须分开
把 JS/CSS/图片和 HTML 页面混用同一套缓存规则,必然翻车。前者要长期强缓存,后者必须可及时更新。
- 静态资源(
main.a1b2c3.js):Cache-Control: public, max-age=31536000, immutable—— 一年有效期 + 声明不可变,连 F5 都不发If-None-Match - HTML 页面(
index.html):Cache-Control: no-cache—— 不是禁止缓存,而是强制每次走协商,靠ETag判断是否真要重传 - 千万别给 HTML 设
max-age=86400这类长时效,用户改完代码推上线,半天看不到效果,第一反应就是“前端没部署”
最常被忽略的一点:缓存拦截是否生效,不能只看页面刷新结果。要用 DevTools Network 面板过滤 img、script 等类型,确认状态码是 200 (from cache) 还是 304;对 HTML,则重点看 if-none-match 请求头有没有发出、服务器是否返回了 304。没有这些信号,所谓“拦截”只是假象。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










