Published on

缓存

Authors

前后端请求缓存

强缓存协商缓存

1.强缓存

如图片,CSS文件等不常更改的资源,没有必要在 HTTP 响应中频繁携带,就会在 HTTP 响应里面添加一个响应头 Cache-Control:max-age=1200(即缓存有效时间为1200s)。这会让浏览器自动将该请求的资源缓存到本地,二次请求若是没过期,直接从本地获取不发送请求

2.协商缓存

两种资源标识符

1.Last-Modified:资源上一次修改的时间

浏览器第一次请求资源时,服务端会返回资源和资源标识 last-Modified;

当浏览器下一次请求该资源时,会带上这个标识,请求头键名为:If-Modified-Since,键值为第一次访问时服务端返回的那个修改时间标识;

该请求发送到服务端之后,服务端会检查该值跟所请求资源的最近修改时间是否为一致:

(1)如果一致直接返回304

(2)如果不一致返回200 + 最新资源 + 最新的资源修改时间

2.ETag:资源对应的唯一字符串

浏览器第一次请求资源时,服务端会返回资源和资源标识 ETag 字符串;

当浏览器下一次请求该资源时,会带上这个字符串,请求头的键名为:If-None-Match,键值为第一次访问时服务端返回的 ETag 字符串;

该请求发送到服务端之后,服务端会检查该值跟所请求资源的标识字符串是否一致:

(1)如果一致说明文件内容没有发生变化,直接返回304;

(2)如果不一致返回200 + 最新资源 + 最新的 ETag字符串。

Last-Modified 和 ETag 比较 优先使用 ETag,Last-Modified 标识即使文件内容相同,但是只要修改时间发生变化,都会再次返回该资源,而 ETag 可以判断出文件内容是否相同,相同则直接返回304,缓存策略更佳

Quoter: