incuisting/blogs

什么是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”则要简单得多。它直接禁止浏览器以及所有中间缓存存储任何版本的返回响应,例如,包含个人隐私数据或银行业务数据的响应。每次用户请求该资产时,都会向服务器发送请求,并下载完整的响应。


参考资料: