http协议之浏览器缓存

前端静态资源并不是每一次都发生变化,那么浏览器会根据协议定义的缓存头来缓存静态资源

关于浏览器的缓存头有

  • cache-control
  • last-modified
  • expires
  • eTag

头解析

cache-control 语法

  • 客户端可以在http请求中使用的
    Cache-control: max-age
    Cache-control: max-stale
    Cache-control:min-fresh
    Cache-control: no-cache
    Cache-control : no-store
    Cache-control: no-transform
    Cache-control: only-if-cached
  • 服务器可以在响应中使用的有
    Cache-control: must-revalidate
    Cache-control: no-cache
    Cache-control:no-store
    Cache-control: no-transform
    Cache-control : public
    Cache-control: private
    Cache-control: max-age
    cache-control: s-maxage

缓存指令

  • public 表明响应可以被任何对象缓存
  • private 表明响应只能被单个用户缓存,不能作为共享缓存
  • no-cache 在发布缓存副本之前,强制高速缓存将请求提交到服务器进行验证
  • only-if-cached 表明客户端只接受已缓存的响应,并且不要向原始服务器检查是否有更新的拷贝

到期

  • max-age 设置缓存存储的最大周期, 时间是请求时间
  • s-maxage 覆盖max-age或 expires 并且私有缓存中它被忽略
  • max-stale 表明客户端愿意接收一个已经过期的资源

禁止缓存
no-cache no-store must-revalidate

缓存失效的判断

对于包含特定头的请求,会先判断 cache-control 字段,如果没有这个字段会判断 Expires 通过比较Expires和头里面的date进行判断,如果都没有,就会找last-modified信息,来判断缓存是否有效

缓存验证

作为缓存的一种强验器,Etag响应头是一个队用户代理不透明的值,如果资源请求的响应头里含有Etag,客户端可以在后续的请求的头中带上 if-none-match头来验证缓存

Last-modified 响应头可以作为一种弱的校验器,客户端可以带上If-modified-since来验证
当向服务器发起缓存验证请求时,服务会返回200和 304, 200 返回新文件同时更新缓存,如果是304没有返回body,直接使用本地缓存,同时更新缓存时间

你可能感兴趣的:(http协议之浏览器缓存)