You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HTTP头中pragma: no-cache与expires过去日期配置的区别是什么?

HTTP不缓存相关头的核心差异

1. 适配标准与兼容性不同

  • Pragma:HTTP/1.0版本的遗留响应头,通用用法只有Pragma: no-cache这一种,仅用于兼容年代极久远、不支持HTTP/1.1的客户端,现代浏览器基本不会优先识别该头。
  • Expires:同样是HTTP/1.0的产物,逻辑是指定一个绝对的GMT时间作为缓存到期节点,当客户端本地时间晚于该时间时就判定缓存失效。它的缺陷非常明显:完全依赖客户端本地时间的准确性,如果用户手动修改了系统时间,缓存判断就会完全失效。
  • Cache-Control:HTTP/1.1版本推出的官方标准缓存控制头,优先级最高、功能最丰富,支持no-cache/no-store/max-age等多种指令,判断缓存有效性时使用相对时间逻辑,不受客户端本地时间影响,是目前行业通用的缓存控制方案。

2. 优先级规则不同

当多个缓存控制头同时存在时,优先级从高到低为:Cache-Control > Expires > Pragma。也就是说只要客户端支持HTTP/1.1能识别Cache-Control,另外两个头的配置会被自动忽略。

多header同时配置的原因

你看到YouTube Music同时配置多个不缓存头,是为了做全场景向下兼容:如果遇到不支持HTTP/1.1的极端古老客户端,无法识别Cache-Control,就会自动降级识别Expires或者Pragma的配置,保证不缓存的逻辑在所有客户端上都能生效,避免漏配导致的异常缓存问题。

常见误区说明

很多人会混淆no-cache和no-store的作用:

  • Cache-Control: no-cache不是完全禁止缓存,而是允许客户端存储缓存,但每次使用缓存前必须向服务器发起请求验证资源是否有更新,验证通过才能使用缓存。
  • 如果需要完全禁止客户端存储任何缓存,应该配置Cache-Control: no-store。

内容的提问来源于stack exchange,提问作者Rin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:27:03