在所有现代浏览器中完全不生效,Chrome 124+、Firefox 125+、Safari 17+、Edge 125+均忽略该标签;真正起效的Pragma必须由服务器通过HTTP响应头发送,且仅对极少数HTTP/1.0客户端有意义;应改用等有效指令。

别用 —— 它在所有现代浏览器里完全不生效。 Chrome 124+、Firefox 125+、Safari 17+、Edge 125+ 全部忽略这个标签,连尝试都不尝试。你加了等于没加,还可能误导自己“已经禁缓存了”。
为什么 实际上没用
HTML 的 http-equiv 是模拟 HTTP 响应头的机制,但浏览器实现极其有限:
-
Cache-Control和Expires的meta版本在部分旧 IE 或 Android Browser 中有微弱效果(仅限手动刷新) -
Pragma的meta版本——W3C 规范没要求支持,所有主流浏览器实测均跳过解析 - 即使你写成
,Network 面板里也看不到任何对应请求头,DevTools 的 “Disable cache” 开关一关,它立刻失效
真正起效的 Pragma 只在两种场景下存在
它不是 HTML 标签的事,而是真实 HTTP 响应头的事:
- 必须由服务器在响应中发送
Pragma: no-cache,且只对极少数仍走 HTTP/1.0 协议的客户端(比如老旧嵌入式设备、定制爬虫)有意义 - 和
Cache-Control: no-cache同时出现时,Pragma仅作冗余兼容字段——真正起作用的仍是Cache-Control - PHP 中若已输出任何内容(哪怕一个空格),
header("Pragma: no-cache")会直接报headers already sent错误,根本发不出去
该用什么替代
如果只能改 HTML(比如共享主机无法配置服务器头),只保留这三行,且顺序不能错:
<meta http-equiv="Cache-Control" content="no-store"><meta http-equiv="Expires" content="0"><meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
说明:
-
no-store是最严格的指令,现代浏览器都认,强制不落磁盘、不进内存缓存 -
Expires: 0对 IE6–8 仍有残余作用,比-1或乱写时间更稳妥 - 第二条
Cache-Control是 fallback:某些旧版 Safari/Android Browser 会忽略no-store,但认no-cache, must-revalidate - 绝对不要写
—— 它不增加任何保护,反而占用字节、干扰调试
最容易被忽略的缓存死角:后退按钮(bfcache)
就算你 header 和 meta 全设对了,用户点「后退」仍可能看到陈旧页面。这不是 HTTP 缓存,而是浏览器的 bfcache(back-forward cache)机制:
- 它绕过所有 Cache-Control 和 Pragma 设置
- 唯一可靠干预方式是监听
pageshow事件:if (event.persisted) location.reload() - 敏感页(如支付结果页、登录跳转页)建议额外加时间戳参数:
result.html?t=,从 URL 层面切断复用可能











