Web 缓存
数据库缓存、服务器端缓存(代理服务器缓存、CDN 缓存)、浏览器(HTTP)缓存
浏览器缓存(本地储存)
HTTP 缓存、indexDB、cookie、localstorage 等等
HTTP 缓存分类
- 首先通过 Cache-Control 验证强缓存是否可用,如果强缓存可用,那么直接读取缓存,并不会将请求发送到服务器。
- 如果不可以,那么进入协商缓存阶段,发起 HTTP 请求,服务器通过请求头中是否带上 If-Modified-Since 和 If-None-Match 这些条件请求字段检查资源是否更新:
- 若资源更新(未命中协商缓存),那么返回资源和 200 状态码
- 如果资源未更新(命中协商缓存),那么告诉浏览器直接使用缓存获取资源,返回 304 状态码
强缓存
- Expires 是一个绝对时间,存在服务器和浏览器时间不同步问题,不推荐使用
- Cache-Control 是一个相对时间(例:Cache-Control:3600),比Expires优先级更高,推荐使用
协商缓存(HTTP 返回码为304)
- Last-Modify 存在精度问题(到秒)
- Etag 返回的是一个校验码,可以保证每一个资源是唯一的,资源变化都会导致ETag变化
相关扩展
- 用户行为与浏览器缓存相互关系
新开窗口 | 有效 | 有效 |
---|---|---|
用户操作 | Expires / Cache-Control | Last-Modified / Etag |
地址栏回车 | 有效 | 有效 |
页面链接跳转 | 有效 | 有效 |
前进、后退 | 有效 | 有效 |
F5 刷新 | 无效 | 有效 |
**Ctrl+F5 **刷新 | 无效 | 无效 |
http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-reading-this-is-enough/
网友评论