- Published on
缓存
- Authors
- Name
- Yanbin
- @ybtaimu
前后端请求缓存
分 强缓存
和 协商缓存
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,缓存策略更佳
。