HTTP缓存

页面第一次加载时,会将资源进行缓存,在过期之前再次请求该资源,则会直接使用缓存,而不会重新发送请求,这样有利于节省资源和加快速度。
http 缓存分为强缓存和协商缓存。

强缓存

在缓存资源过期之前再次请求,则会使用强缓存。
强缓存通过expirescache-control控制资源过期时间,cache-control的优先级高于expires
cache-control接收的值有
  • max-age: value 设置过期时间,表示多少 s 后过期
  • s-maxage: value 代理服务器的缓存时间
  • no-store 不使用缓存
  • no-cache 缓存,但是每次都要向服务器验证
  • private 响应只能被客户端缓存
  • public 响应可以被任意缓存

协商缓存

当超过过期时间之后再请求缓存资源时,则会向服务器协商,客户端将缓存标识传给服务器,服务器拿着资源标识去匹配,如果资源没有更新,则返回 304 状态码并重新设置过期时间,客户端会读取本地缓存;如果不匹配,则表示资源有更新,服务器将新数据和新的资源标识一起返回给客户端。
发送需要发送资源标识和最后修改时间,但是服务器发给客户端的和客户端发给服务器都要这两个字段,因此共有这四个字段,两两出现。
  • etag 资源唯一标识
  • last-modified 最后修改时间
  • if-None-Match 客户端缓存资源标识
  • if-Modified-Since 客户端发送给服务器的资源最后修改时间
 

CDN缓存服务器

可以通过cache-control请求头字段控制资源是否可以被缓存服务器缓存,以及缓存的时间。
  • private: 只允许客户端缓存
  • public: 允许被任意缓存区缓存
  • no-store: 不缓存
  • s-maxage:缓存服务器缓存时间