协议大纲:
http缓存的优点有哪些?
1. 减缓服务器压力
2. 让客户端浏览器进行缓存
http缓存如何实现?
1. 让浏览器缓存
2. 让代理服务器缓存
http的Cache-Control:
HTTP/1.1可以通过Cache-Control首部字段来控制缓存
Cache-Control: public
no-store (禁止进行缓存): 指定不能对请求或响应任意一部分缓存
no-cache (强制确认缓存): 缓存服务器要先向服务端验证资源的有效性,
只有当缓存资源有效才能使用缓存对请求进行响应
private (私有缓存): 指定资源作为私有缓存, 只能单用户使用, 一般是存储在用户浏览器中
public (公共缓存): 指定资源作为公共缓存, 可以被多个用户使用, 一般是存储在代理服务器中
http缓存过期机制:
max-age 在请求头中表示: 如果缓存时间小于max-age时间, 那么接受该缓存
max-age 在响应头中表示: 表示缓存在缓存服务器存储的时间
Cache-Control: max-age=31536000
Expires用于告知缓存服务器缓存什么时候过期
Expires: Wed, 04 Jul 2012 08:26:05 GMT
在 HTTP/1.1 中, 会优先处理 max-age
在 HTTP/1.0 中, max-age 指令会被忽略
http的缓存验证:
ETag 字段: 它是资源的唯一标识, 如: www.github.com有两个资源(中文和英文),
只有 ETag 才能对这两个资源进行唯一标识
ETag: "3a0772443a0739141292a5429b952fe6"
将缓存资源的 ETag 值放入 If-None-Match 首部, 服务器收到该请求后,
判断缓存资源的 ETag 值和资源的最新 ETag 值是否一致, 如果一致则表示缓存资源有效, 返回 304 Not Modified
If-None-Match: "3a0772443a0739141292a5429b952fe6"
Last-Modified 字段: 它也可以用于缓存验证, 它包含在代理服务器发送的响应报文中,
指示源服务器对资源的最后修改时间, 但是它是一种弱校验器, 因为只能精确到一秒,
所以它通常作为 ETag的备用方案, 如果响应首部字段里含有这个信息,
客户端可以在后续的请求中带上 If-Modified-Since 来验证缓存,
服务器只在所请求的资源在给定的日期时间之后对内容进行过 修改的情况下才会将资源返回,
状态码为 200 OK, 如果请求的资源从那时起未经修改, 那么返回 304 Not Modified 响应
Last-Modified: Wed, 12 Oct 2019 22:16:25 GMT
If-Modified-Since: Wed, 12 Oct 2019 22:16:25 GMT
http响应缓存的条件:
1. 请求方法必须是GET,HEAD
POST 大多情况下不可缓存
PUT, DELETE不可缓存
2. 响应码必须是 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501
3. 响应报文一定包括Cache-Control, 如果不指定则不缓存
结束
这就是我对http缓存的介绍, 感觉有用就点个赞吧 如果有错误或更好的方法评论区请多多指出 相互学习共同进步