什么是Cache-Control??
Opened this issue · 0 comments
Cache-Control是服务端返回给浏览器端的字段,目的是让浏览器知道如何去缓存。
Cache-Control最基础的样式如下:
Cache-Control: max-age=2592000, public
它定义了文件应该被缓存的时间和缓存的形式。上面的Cache-Control可以分为两个部分去看待,前半的max-age和后半public。就是前半为时间后半为缓存指令
max-age是什么?
定义了一个时间,这个时间内,内容不会被重复请求,超过这个时间缓存会失效,需要重新去向浏览器请求。
max-age怎么用?
如上面基础样式所展示的那样
max-age = 2592000
max-age是以秒为单位
常见的时间设置
- 一分钟: max-age=60
- 一小时: max-age=3600
- 一天: max-age=86400
- 一周: max-age=604800
- 一个月: max-age=2628000
- 一年: max-age=31536000
缓存指令??
它来告诉浏览器以何种方式去缓存文件
主要介绍几种常见的形式:
- public
- private
- no-cache
- no-store
可以把上述的四个按照两对来理解
“public”与“private”
当响应被标为public的时候,这就意味着,这个响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存。
而private则恰恰相反,响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。
举个例子,就是当你访问微博的时候,你使用用户A和用户B访问相同的url,当里面的内容的缓存指令为public的时候。用户A访问过之后,用户B访问的时候就可以直接用缓存的数据。而如果private的时候,当用户A访问之后你再切换到用用户B去访问这个url,浏览器并不会去使用用户A的缓存,虽然相同的页面,里面的内容相对于大家而言都是公开的,但是只要设置为了private,那么就是只正对用户缓存,所以用户B还是会去请求一次,获取内容。
“no-cache”和“no-store”
“no-cache”表示必须先与服务器确认返回的响应是否发生了变化,然后才能使用该响应来满足后续对同一网址的请求。因此,如果存在合适的验证令牌 (ETag),no-cache 会发起往返通信来验证缓存的响应,但如果资源未发生变化,则可避免下载。
相比之下,“no-store”则要简单得多。它直接禁止浏览器以及所有中间缓存存储任何版本的返回响应,例如,包含个人隐私数据或银行业务数据的响应。每次用户请求该资产时,都会向服务器发送请求,并下载完整的响应。
参考资料: