HTTP缓存
HTTP缓存是一种缓存网络资源的技术,可以提交页面加载速度,缓存会存在本地,通过标识符确定资源是否是缓存的是否失效,HTTP缓存分两种, 强缓存和协商缓存
什么是强缓存
强缓存是存在本地的,通过expires 和cache-control,pragma来控制
expires
- 服务器返回的过期时间,因为服务器和客户端时间可能有差别,所以不一定准确
cache-control
有多个选项:
- no-store: 不缓存
- no-cache: 不强缓存 但是要协商缓存
- max-age:到期时间的秒数
- private/public: private指的单个用户,public可以被任何中间人、CDN等缓存
- must-revalidate:在缓存过期前可以使用,过期后必须向服务器验证
pragma
一个标识用来在http1.0里代替cache-control的 ,cache-control是http1.1的
优先级:cache-control(pragma)>expires
在http请求里直接显示为200
什么是协商缓存
协商缓存也是存在本地的,但是需要发送标识符给服务器,由服务器确定缓存是否失效,标识符有两个
last-modified
- 服务器最后一次修改时间
e-tag
- 生成一个唯一ID
优先级 e-tag>last-modified
在http请求里显示为304
缓存流程
1.先检查是否存在强缓存,也就是检查expires和cache-control 是否失效,
--没失效直接使用 状态码304
流程结束
2. 失效了,将last-modified或者e-tag取出来,发送给服务器,,发送字段last-modified用last-modified-since发送,e-tag用last-none-match发送给服务器 由服务器检查是否失效
-- 没失效返回304 直接使用缓存
流程结束
3. 服务器检查也失效了,就会直接把资源传回来,浏览器拿着使用
流程结束