Skip to content

浏览器缓存 #57

@nmsn

Description

@nmsn

原文: https://mp.weixin.qq.com/s/0P8_lnVf2_zMzIBJ20qajA

HTTP 1.0 使用 Expires 的 header 来控制,指定一个 GMT 的过期时间,但是当浏览器时间不准的时候就有问题

HTTP 1.1 使用 max-age 来设置过期时间,让浏览器自己计算。并且把所有的缓存相关的控制都放到了 Cache-Control 的 header 里, 像 max-age 等叫做指令,用逗号隔开

HTTP 1.1 加入了协商缓存的功能,通过 If-None-Match 和 If-Modified-Since 的 header 带资源的 Etag 和 Last-Modied 到服务器询问是否过期,过期返回 200 和新的内容,没过期返回 304,使用浏览器缓存数据

其他 Cache-Control 指令:

  • public: 允许代理服务器缓存资源
  • s-maxage: 代理服务器的资源过期时间
  • private: 不允许代理服务器缓存资源,
  • immutable: 就算过期了也不用协商,资源就是不变的
  • max-stale: 过期了一段时间的话,资源也能用
  • stale-while-revalidate: 在验证(协商)期间,返回过期的资源
  • stale-if-error: 验证(协商)出错的话,返回过期的资源
  • must-revalidate: 不允许过期了还用过期资源,必须等协商结束
  • no-store: 禁止缓存和协商
  • no-cache: 允许缓存,但每次都要协商

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions