这是我参与新手入门的第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 表示客户端可以缓存资源,每次使用缓存资源前都必须重新验证其有效性。