浏览器缓存

关键字段

请求头

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

响应头

  • Expires
  • ETag
  • Last-Modified
  • Cache-Control
  • Expires

max-age 和 Expires 区别

http/1.0 的 expires 指绝对时间,会出现客户端修改本地时间缓存失效的问题;http/1.1 新加 max-age 字段表示最长缓存相对时间,单位是 s,优先级更高。

缓存流程

浏览器缓存

关键字段

Cache-Control

  • public
  • private
  • no-cache
  • no-store
  • max-age
  • s-maxage=<seconds>覆盖 max-age,用于代理服务器
  • max-stale[=<seconds>] 最长过期时间

有了 ETag 为什么还要 Last-Modified

ETag 为了解决后者不够精细(1s 内多次修改)而出现,优先级更高;但它同样有问题——负载均衡时多个服务器 ETag 值不能同步,此时就需要使用 Last-Modified。(计算机没有银弹)

为什么需要缓存

性能、速度、体验

不同刷新有什么区别

  • F5===no-cache
  • Ctrl+F5===no-store