Cache-Control
Expired:仅在 HTTP/1.0 使用;- max-age:缓存的最长“新鲜”时长;
- s-maxage: 会覆盖 max-age 以及 Expires 数据(但仅对 shared/public 缓存有效);
- max-stale: 缓存的最长保留时长,当缓存不在新鲜,会从网络获取新鲜数据,但是当获取数据发生异常,会获取还在 max-stale 时长内的数据,超过 max-stale 时长的数据会被删除抛弃;
- no-store:不使用缓存;
- only-if-cached:只使用缓存,若没有缓存则返回 503错误;
Etag / If-None-Match 策略
sequenceDiagram
Note right of 客户端: 第一次请求:
客户端->>+服务器: http 请求
服务器-->>-客户端: ETag: W/"5886c231-8d9"
Note right of 客户端: 第二次请求:
客户端->>+服务器: If-None-Match: W/"5886c231-8d9"
loop 判断客户端缓存是否过期
服务器->>服务器: 通过 If-None-Match 判断客户端缓存是否过期
end
alt 过期
服务器-->>客户端:返回200 + 新数据
else 没过期
服务器-->>-客户端:返回 304.
end
Last-Modified / If-Modified-Since 策略
sequenceDiagram
Note right of 客户端: 第一次请求:
客户端->>+服务器: http 请求
服务器-->>-客户端: Last-Modified: Tue, 24 Jan 2020 02:02:02 GMT
Note right of 客户端: 第二次请求:
客户端->>+服务器: If-Modified-Since: Tue, 24 Jan 2020 02:02:02 GMT
loop 判断客户端缓存是否过期
服务器->>服务器: 通过 If-Modified-Since 判断客户端缓存是否过期
end
alt 过期
服务器-->>客户端:返回200 + 新数据
else 没过期
服务器-->>-客户端:返回 304.
end