请求响应之-Cache-control

214 阅读2分钟

这是我参与新手入门的第2篇文章

强制缓存设置

Cache-control 和 Expires可以造成强制缓存

1.Expires

HTTP 1.0 的字段,缓存到期时间,是一个绝对的时间,如

expires: Wed, 07 Jul 2021 07:23:29 GMT

服务器响应头中设置的过期时间,目的是告知浏览器没到这个时间不要过来请求!

存在的问题:
  • 浏览器参考的是本地时间,本地时间不可信任,有可能被用户手动设置修改,导致缓存失效
  • 更新时效问题,服务器上文件已更改,但没有到浏览器设置过期时间,文件无法被更新
2.Cache-control

Cache-Control 通用消息头字段,被用于在http请求和响应中,通过指定指令来实现缓存机制。缓存指令是单向的,这意味着在请求中设置的指令,不一定被包含在响应中。 接下来列举部分常见指令,更全的请参考MDN

缓存请求指令

Cache-Control: max-age=345345

Cache-control: no-cache

Cache-control: no-store

缓存响应指令

Cache-control: no-cache

Cache-control: no-store

Cache-control: public

Cache-control: private

Cache-Control: max-age=5435354353

缓存指令释义
  • no-cache:在发布缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证(协商缓存验证)。
  • no-store:不使用任何缓存
  • private:私有缓存可以缓存响应内容,比如:对应用户的本地浏览器。
  • public:表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存
  • max-age:设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与Expires相反,时间是相对于请求的时间。

指定 no-cache 或 max-age=0, must-revalidate 表示客户端可以缓存资源,每次使用缓存资源前都必须重新验证其有效性。