# 简述 http 的缓存机制
Issue
欢迎在 Issue 中交流与讨论: Issue 80 (opens new window)
Author
Http 缓存分为以下两种,两者都是通过 HTTP 响应头控制缓存
- 强制缓存
- 协商缓存
# 强制缓存
再次请求时无需再向服务器发送请求
client server
GET /a.ab389z.js ------->
<------- 200 OK
(再也不会发请求)
与之相关的 Response Headers 有以下几个
Expires
这个头部也是丧心病狂:使用绝对时间,且有固定的格式 https://tools.ietf.org/html/rfc822#section-5.1 (opens new window)
Expires: Mon, 25 Oct 2021 20:11:12 GMT
Cache-Control
,具有强大的缓存控制能力常用的有以下两个
no-cache
,每次请求需要校验服务器资源的新鲜度max-age=31536000
,浏览器在一年内都不需要向服务器请求资源
# 协商缓存
再次请求时,需要向服务器校验新鲜度,如果资源是新鲜的,返回 304,从浏览器获取资源
client server
GET /a.js ----------->
<----------- 200 OK
GET /a.js ----------->
<----------- 304 Not Modified
与之相关的 Response Headers 有以下几个
Last-Modified
/Modified-Since
Etag