缓存命中 -> 缓存再验证成功 -> 缓存再验证失败 = 缓存未命中
-
Cache_Control
可缓存性 解释 public HTTP请求返回的过程中,在cache_control中设置这个值,代表HTTP请求返回的内容所经过的任何路径当中(包括中间一些HTTP代理服务器以及发出请求的客户端浏览器),都可以对返回内容进行缓存操作 private 代表只有发起请求的浏览器才可以进行缓存 no_cache 可以在本地进行缓存,但每次发请求时,都有向服务器进行验证,如果服务器允许,才能使用本地缓存 no_store 本地和代理服务器都不可以存储缓存,每次都要重新请求,拿到内容 no_transform 主要用在proxy服务器,不允许进行格式转换 -
max_age 和 Expires
- 浏览器会先检查缓存是否过期,如果没有过期,就不向服务器发起请求,直接使用本地缓存,这叫做缓存命中。
- max_age:最大缓存时间
- Expires:有效期
- 这两个同时存在时,max_age优先生效
-
Etag 和 Last_Modified
- 如果没有max_age和Expires标签,或者验证失败,则浏览器向服务器发起请求,浏览器通过Etag或Last_Modified判断浏览器缓存的内容是否过期。
- 如果没过期返回304(服务端已经执行了请求,但是响应没有改变),这叫做缓存再验证成功,浏览器更新本地缓存的max_age和Expires,并且使用本地缓存。
- 如果过期了,这叫做缓存再验证失败(缓存未命中),则返回新的数据。
- Etag:被请求变量的实体标记(与客户端请求头If_None_Match对应)
- Last_Modified:被请求变量的最后修改时间(与客户端请求头If_Modified_Since对应)
- 如果两者都有,就必须同时验证,并且两者都满足才会返回304
- 如果没有max_age和Expires标签,或者验证失败,则浏览器向服务器发起请求,浏览器通过Etag或Last_Modified判断浏览器缓存的内容是否过期。