在 HTTP 协议中,强制缓存与协商缓存并没有互斥性,两种机制可以并行工作

强制缓存

强制缓存是实效性的。客户端与服务器约定一个过期时间,在该过期时间内,假定资源的内容与状态不会改变,即在该时间内,客户端都可以直接使用该资源的本地缓存,而不需要再去请求资源。

根据约定,强制缓存在浏览器的地址输入、页面连接跳转、新开窗口、前进和后退中均生效,当在用户主动刷新页面 时应当自动失效

协商缓存

协商缓存通过检测机制,检测资源是否发生变化,需要重新获取。检测机制有两种:

  1. 根据资源的修改时间
  2. 根据资源的唯一标识

如果服务器检测到资源没有被修改,就只会返回一个空的 304 Not Modified;如果修改,则返回 200 OK,并在消息体中包含最新的资源。

与强制缓存相比,协商缓存在用户主动刷新页面仍然生效。只有当用户强制刷新,或者明确禁用缓存时,协商缓存才会失效,此时客户端发出的请求头会带有Cache-Control:no-cache