缓存

服务器的缓存控制

  • 浏览器发现缓存中没有数据,于是发送请求,向服务器获取资源
  • 服务器响应请求,返回资源,同时标记资源的有效期
  • 浏览器缓存资源,等待下次重用

Cache-Control

里面的值max-age=30就是资源的有效时间只有30秒,相当于告诉浏览器,这个页面只能缓存30秒,之后就过期了,不能用。

注意: max-age是生存时间,又叫做新鲜度,它的时间的计算起点是响应报文的创建时间,也就是数据离开服务器的时刻,而不是客户端收到报文的时刻,所以如果数据在传输的过程中耗费了大量的时间,到达客户端的时候存活时间就没有30秒了。

其他几个缓存控制属性

  • no_store: 买来的西瓜不允许放冰箱,要么立刻吃掉,要么立刻扔掉
  • no_cache: 可以放进冰箱,但吃之前必须向超市询问有没有更新鲜的,有就吃超市里的。
  • must-revalidate: 可以放进冰箱,保鲜期内可以吃,过期了就要问超市还让不让吃。

关于Cache-Control

不止服务器可以发送”Cache-Control”头,浏览器也可以发送”Cache-Control”头,

就是说请求-应答的双方都可以用这个字段进行缓存控制,互相协商缓存的使用策略。

当你点击浏览器的“刷新”按钮的时候,浏览器会在请求头里面加一个
Cache-Control:max-age=0因为max-age是生存时间,max-age=0的意思就是
“我要一个最最新鲜的西瓜”,而本地缓存里的数据至少保存了几秒钟了,所以
浏览器就不会使用缓存,而是向服务器发送请求。服务器看到max-age=0也就会用一个
最新生成的报文回应浏览器。

而Ctrl+F5的“强制刷新” 其实是发送了一个Cache-Control:no-cache
含义和max-age=0基本一样。