浅谈 cache-control 是怎么回事?

在http中,控制缓存开关的字段有两个:Pragma 和 Cache-Control。
Pragma有两个字段Pragma和Expires。Pragma的值为no-cache时,表示禁用缓存,Expires的值是一个GMT时间,表示该缓存的有效时间。
网页的缓存是由 HTTP 消息头中的“Cache-control”来控制的,请求时常见的取值有


image.png

响应时常见的取值有


image.png

Expires 头部字段提供一个日期和时间,响应在该日期和时间后被认为失效。允许客户
端在这个时间之前不去检查(发请求),等同 max-age 的效果。但是如果同时存在,则被
Cache-Control 的 max-age 覆盖。
Expires = "Expires" ":" HTTP-date
例如:
Expires: Thu, 01 Dec 1994 16:00:00 GMT (必须是 GMT 格式)
如果把它设置为-1,则表示立即过期
Expires 和 max-age 都可以用来指定文档的过期时间,但是二者有一些细微差别
1.Expires 在 HTTP/1.0 中已经定义,Cache-Control:max-age 在 HTTP/1.1 中才有定义,为
了向下兼容,仅使用 max-age 不够。同时出现Cache-Control和Expires时,以Cache-Control为准。即优先级从高到低是 Pragma -> Cache-Control -> Expires

  1. Expires 指定一个绝对的过期时间(GMT 格式),这么做会导致至少 2 个问题:
    2.1 客户端和服务器时间不同步导致 Expires 的配置出现问题。
    2.2 很容易在配置后忘记具体的过期时间,导致过期来临出现浪涌现象
  2. max-age 指定的是从文档被访问后的存活时间,这个时间是个相对值(比如:3600s),
    相对的是文档第一次被请求时服务器记录的 Request_time(请求时间)
  3. Expires 指定的时间可以是相对文件的最后访问时间(Atime)或者修改时间(MTime),而
    max-age 相对对的是文档的请求时间(Atime)
  4. 如果值为 no-cache,那么每次都会访问服务器。如果值为 max-age,则在过期之前不
    会重复访问服务器。

你可能感兴趣的:(浅谈 cache-control 是怎么回事?)