现代浏览器完全不执行meta http-equiv="cache-control",缓存行为100%由服务器响应头决定;chrome 90+、firefox 80+、safari 15+已移除其解析逻辑,file://协议下更彻底失效。

现代浏览器完全不执行 meta http-equiv="Cache-Control",它对缓存行为零影响——写了等于没写,调试时看到“生效”基本是误判。
Chrome/Firefox/Safari/Edge 都已移除解析逻辑
从 Chrome 90、Firefox 80、Safari 15 起,所有主流浏览器明确废弃了对 Cache-Control、Expires、Pragma 这三类 http-equiv 值的解析。这不是兼容性问题,而是设计层面的移除:
- HTTP 缓存决策发生在网络层(请求发出前/响应接收后),远早于 HTML 解析阶段;
meta标签此时还没被读到 - DevTools Network 面板中看到的
Cache-Control字段,100% 来自服务器响应头,和meta无关 - 即使把
<meta http-equiv="Cache-Control" content="no-cache">放在最开头,也改变不了结果
file:// 协议下 meta 完全不触发任何缓存控制
本地双击打开 HTML 文件时,没有 HTTP 协议栈,也就没有响应头概念。此时浏览器不会尝试用 meta 模拟缓存指令——它压根不走那条路径:
-
file://下连Cache-Control这个字段都不存在,更谈不上“被忽略” - 有人观察到“加了 meta 后刷新变慢”,其实是浏览器在
file://下默认做更保守的资源重载,和meta无关 - 误把
file://行为当“meta 有效”,是调试中最常见的归因错误
真正还起作用的 http-equiv 值只剩几个,且与缓存无关
目前仍被部分支持的 http-equiv 值极少,且全部不参与缓存策略:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
-
Content-Type:仅用于声明字符集,如content="text/html; charset=utf-8";错写成encoding会导致乱码 -
Refresh:可跳转或重载页面,如content="3;url=/done";但不绕过缓存,目标页是否更新仍取决于其自身响应头 -
Content-Security-Policy:Firefox 等支持,但行为不统一;生产环境必须走响应头
而 Cache-Control、Expires、Pragma 这三个曾被广泛滥用的值,W3C 未要求实现,浏览器厂商也已主动移除。
验证 meta 是否“生效”的唯一可靠方式
别信 F5 刷新、别信控制台打印、别信自己改了 HTML 就以为变了。真验证只有一条路径:
- 确保页面通过
http://或https://访问(file://下无效) - 打开 DevTools → Network → 刷新页面 → 找到 HTML 请求 → 点开 Headers 标签页
- 只看 Response Headers 区域里的
Cache-Control字段——它的值必须来自服务器,不是你写的meta - 如果状态显示
200 from disk cache或304 Not Modified,说明缓存行为由服务端头决定,和meta无关
真正容易被忽略的是:开发者花半天调 meta 写法,却没检查 Nginx 或 CDN 是否给 HTML 返回了 Cache-Control: public, max-age=3600——那才是问题源头。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










