【面试常问】强缓存和协商缓存

WEB缓存机制

1. 类别

  • 数据库缓存
  • CDN缓存(Content Delivery Network 内容分发网络)
  • 代理服务器缓存
  • 浏览器缓存(http缓存)
  • 应用层缓存(代码层面上,通过代码逻辑将请求过的数据缓存起来)

2. Cache-Control

  • no-cache 优先询问服务器
  • no-store 禁止本地存储,每次从服务器下载
  • public 可以被代理服务器缓存
  • private 只能被客户端缓存
  • max-age 设置资源被缓存的最长时间

3. 名词

  • 强缓存(Expires/max-age)

强致缓存。在HTTP1.0中强缓存通过Expires响应头实现。
在HTTP1.1中,Cache-control响应头实现,其中max-age=xxx表示缓存资源将在xxx秒后过期。

  • 协商缓存(Last-Modified/E-tag)

协商缓存。在HTTP1.0中第一次请求资源时通过服务器设置Last-Modified响应头,填入最后修改时间。在之后的每次请求中都会在请求头中带上If-Modified-Since字段,如果未更新就返回304,指导浏览器从本地缓存中读取。
在HTTP1.1中,Etag设置响应头缓存标志。请求头附带If-None-Match。

  • 强缓存和协商缓存的区别总结:
  1. 强缓存只有首次请求会跟服务端通信,读取缓存资源时不用发送请求。返回200。
  2. 协商缓存总会与服务器交互,第一次是拿数据和E-tag的过程,之后每次凭E-tag询问是否更新。命中缓存返回304。
  3. 二者之间最大的区别就是:强缓存只通信一次;协商缓存每次都通信询问。

4. 请求头

  • If-Modified-Since
  • If-Unmodified-Since
  • If-None-Match
  • If-Match

5. 参考链接

  • 10分钟彻底搞懂Http的强制缓存和协商缓存
  • HTTP缓存控制小结

你可能感兴趣的:(面试常问)