Http 缓存分为以下两种,两者都是通过 HTTP 响应头控制缓存

  1. 强制缓存
  2. 协商缓存

强制缓存

再次请求时无需再向服务器发送请求
与之相关的 Response Headers 有以下几个
Expires
使用绝对时间,且有固定的格式 https://tools.ietf.org/html/rfc822#section-5.1
Cache-Control,具有强大的缓存控制能力
常用的有以下两个

  • no-cache,每次请求需要校验服务器资源的新鲜度
  • max-age=31536000,浏览器在一年内都不需要向服务器请求资源


    协商缓存

    再次请求时,需要向服务器校验新鲜度,如果资源是新鲜的,返回 304,从浏览器获取资源
    与之相关的 Request/Response Headers 有以下几个

  • Last-Modified/If-Modified-Since

  • Etag/If-None-Match

请求资源时,把用户本地该资源的 etag 同时带到服务端,服务端和最新资源做对比。
如果资源没更改,返回304,浏览器读取本地缓存。
如果资源有更改,返回200,返回最新的资源。

怎么设置强缓存与协商缓存

后端服务器如nodejs:
res.setHeader(‘max-age’: ‘3600 public’)
res.setHeader(etag: ‘5c20abbd-e2e8’)
res.setHeader(‘last-modified’: Mon, 24 Dec 2018 09:49:49 GMT)

nginx配置
image.png