HTTP 协议本身设计的优先级顺序如下:
最上面优先级最高,到下面最小:
Cache-Control: no-store
Cache-Control: no-cache
Cache-Control: must-revalidate
Cache-Control: max-age
Expires:
常用 Header 简单讲解:
1. 不缓存控制
- Cache-Control: no-store : 禁止中间的缓存服务器存储这个对象.并给 header 转发给用户.
- Cache-Control: no-cache : 缓存服务器可以给文件缓存在本地缓存区.只是在和源站进行新鲜验证前,不能提供给客户端使用.
- Pragma: no-cache 这是兼容 HTTP/1.0 时使用.原则上只能用于 HTTP 请求.用处和 Cache-Control: no-cache 一样
2. 指定过期时间控制
- Cache-Control: max-age 表示如果缓存服务器拿到这个文件后,这个对象多久之内是新鲜的,可用的,可以发给客户端使用的.
- Cache-Control: s-maxage 行为和上面一样,只是只能使用于 public 地时候缓存.
- Cache-Control: must-revalidate 默认的情况下,缓存代理是可以提供给用户一些旧的对象的内容,以提高性能.但如果原始服务器不希望这样,就可以配置这个选项.进行严格检查.比如源站不可用时,回源验证过程会失败.默认会吐旧的数据.但配置了这个以后会吐 504 Gateway Timeout
- Expires: 这个作用和 max-age 是一样.但这是指定一个过期的日期,但不是秒数.所以不建议使用.因为很多缓存服务器和源服务器常常时间不同步,所以基于 max-age 是使用相对的时间来表示还剩下多少秒可用.不要使用 Expires 来使用绝对时间.