缓存

缓存通过HTTP协议使用请求头和响应头协同作用实现

响应头:(request) 作用
cache-control 其值‘max-age=100’用于控制文件在本地缓存的有效时长,表示缓存100s之后失效(是从发出请求开始算)
expires 与cache-control类似。Expires的值是一个绝对的时间点,如:Expires: Sat, 21 Aug 2021 05:25:06 GMT,表示在这个时间点之前,缓存都是有效的。但cache-control可以更精细的设置,且优先级更高
cache-control的值 作用
public 指示响应可被任何缓存区缓存。
Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache 指示请求或响应消息不能缓存
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
no-transform 不允许转换存储系统
must-revalidate 告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。
示例:
res.header('Cache-Control', 'public, max-age=100')

搭配使用:

  1. Last-Modified是被请求的资源最后一次发生改动的时间,比方说被请求的是一个img图片,由于某些操作,这个img图片内容变了,则其对应的Last-Modified也就实时的更新了。
    与Last-Modified搭配使用的是If-Modified-Since,这是浏览器(前端)根据Last-Modified做的记录。也就是说If-Modified-Since就像是Last-Modified的旧值;发起请求页面的时候,新旧两个对比,不相等就说明后端的img变了,前端就会收到状态码为200
    ,然后If-Modified-Since又改成和Last-Modified一样的值。如果没变,就说明服务器上的那个img没变,前端就收到状态码为304。
    上述这一整个对比Last-Modified和If-Modified-Since的过程都是浏览器,服务器自动做的的,不需要代码实现,只是要知道304这个状态码代表:被请求的资源(img图片)没有改变过

  2. ETag和If-None-Match配合使用,也和Last-Modified它们一样,只是它们记录的是时间,ETag俩记录的是对被请求资源(img图片)进行标识的特征字串;ETag和Last-Modified是服务器端发的,If-None-Match和If-Modified-Since是浏览器发送的。这都是自动的

  3. 若这四个都用,则要两队都对比成功,都是一样的才会收到403,否则还是200

如图的Last-Modified = If-Modified-Since,ETag = If-None-Match所以返回304状态码,图片没变过

/*
res.header('Cache-Control', 'public, max-age=100')
max-age=100,缓存100s
100s内浏览器不会再请求这个接口,内容不会变,除非浏览器手动清除缓存
*/
index.get('/pic', (req, res) => {
  res.header('Cache-Control', 'public, max-age=100')
  res.sendFile(path.join(__dirname, '../img/img1.jpg'))
})
//即使服务器端图片地址变了,这张图片也还那样,浏览器100s内不会理它
<img src='/pic' />

关键结论

打开新窗口 如果指定cache-control的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:Cache-control: max-age=5 表示当访问此网页后的5秒内再次访问不会去服务器.
在地址栏回车 如果值为private或must-revalidate,则只有第一次访问时会访问服务器,以后就不再访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。
按后退按扭 如果值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问.
按刷新按扭 无论为何值,都会重复访问.

部分搬运于:

posted on 2022-02-25 02:11  In-6026  阅读(52)  评论(0)    收藏  举报

导航