Skip to main content

缓存

强缓存

Cache-control 实现强缓存

//往响应头中写入需要缓存的时间  
res.writeHead(200,{
    'Cache-Control':'max-age=10'
});

Cache-controlmax-ages-maxageno-cacheno-storeprivatepublic这六个属性。

  • max-age决定客户端资源被缓存多久。

  • s-maxage决定代理服务器缓存的时长。

  • no-cache表示是强制进行协商缓存。

  • no-store是表示禁止任何缓存策略。

  • public表示资源即可以被浏览器缓存也可以被代理服务器缓存。

  • private表示资源只能被浏览器缓存。

no-cache和no-store

no_cacheCache-control的一个属性。它并不像字面意思一样禁止缓存,实际上,no-cache的意思是强制进行协商缓存。如果某一资源的Cache-control中设置了no-cache,那么该资源会直接跳过强缓存的校验,直接去服务器进行协商缓存。而no-store就是禁止所有的缓存策略了。

max-age和s-maxage

max-age表示的时间资源在客户端缓存的时长,而s-maxage表示的是资源在代理服务器可以缓存的时长。

在一般的项目架构中max-age就够用。

s-maxage因为是代理服务端的缓存时长,他必须和上面说的public属性一起使用(public属性表示资源可以在代理服务器中缓存)。

注意,max-ages-maxage并不互斥。他们可以一起使用。

Cache-control如何设置多个值呢?用逗号分割,如下↓

Cache-control:max-age=10000,s-maxage=200000,public

协商缓存

基于last-modified的协商缓存

基于last-modified的协商缓存实现方式是:

  1. 首先需要在服务器端读出文件修改时间,

  2. 将读出来的修改时间赋给响应头的last-modified字段。

  3. 最后设置Cache-control:no-cache