网络缓存控制指南:强缓存与协商缓存

网络缓存控制指南:强缓存与协商缓存
墨颜丶适用场景:Web性能优化、静态资源管理、API响应优化
缓存基础概念
什么是缓存?
浏览器或服务器通过缓存机制减少重复请求,提升加载速度。缓存分为 强缓存(直接使用本地资源)和 协商缓存(验证资源是否更新)。
强缓存配置
1. 定义与原理
- 直接命中:浏览器无需与服务器通信,直接使用本地缓存资源。
- 控制方式:通过
Cache-Control
和Expires
响应头设置。
2. 关键响应头
响应头 | 说明 |
---|---|
Cache-Control: max-age=3600 | 相对时间(1小时),优先级高于 Expires (推荐使用)。 |
Expires: Thu, 31 Dec 2030 23:59:59 GMT | 绝对时间(依赖客户端时钟,可能误差)。 |
3. Nginx 配置示例
1 | # 配置静态资源强缓存(1年有效期) |
4. 行为流程
- 首次请求:服务器返回资源 + 缓存头。
- 后续请求:浏览器直接读取本地缓存(状态码
200 (from disk cache)
)。
5. 适用场景
- 静态资源:图片、CSS、JS、字体文件等长期不变的资源。
- 优化目标:完全避免网络请求,降低服务器负载。
协商缓存配置
1. 定义与原理
- 验证更新:浏览器每次请求时携带缓存标识,服务器验证后返回
304 Not Modified
或新资源。 - 控制方式:通过
Last-Modified
和ETag
响应头。
2. 关键响应头
响应头 | 说明 |
---|---|
Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT | 资源最后修改时间(精度为秒)。 |
ETag: "5d8c72a5-264" | 资源唯一标识(哈希值或版本号,精度更高)。 |
3. Nginx 配置示例
1 | # 启用协商缓存(默认已支持) |
4. 行为流程
- 首次请求:服务器返回资源 +
Last-Modified
/ETag
。 - 后续请求:浏览器携带
If-Modified-Since
或If-None-Match
验证。 - 响应结果:
- 未修改:返回
304 Not Modified
,使用本地缓存。 - 已修改:返回
200 OK
和新资源。
- 未修改:返回
5. 适用场景
- 动态资源:HTML页面、API响应等可能频繁更新的内容。
- 优化目标:减少全量传输,仅在必要时更新资源。
强缓存与协商缓存对比
特性 | 强缓存 | 协商缓存 |
---|---|---|
通信成本 | 无网络请求 | 需发送请求验证 |
响应状态码 | 200 (from disk cache) | 304 Not Modified |
优先级 | 优先于协商缓存 | 强缓存过期后触发 |
适用资源 | 长期不变的静态资源 | 频繁更新的动态资源 |
Nginx 最佳实践
1. 混合配置示例
1 | # 强缓存 1 小时,过期后触发协商缓存 |
2. 按文件类型区分策略
1 | # 图片、字体等强缓存 |
3. 解决缓存更新问题
- 强缓存:通过 文件名哈希(如
main.abcd1234.js
)强制浏览器加载新版本。 - 协商缓存:更新
ETag
或Last-Modified
值触发更新。
调试工具与步骤
1. 浏览器开发者工具
- Network 标签:
- 查看
Status
列:200 (from disk cache)
(强缓存命中)或304
(协商缓存命中)。 - 检查
Headers
标签中的Cache-Control
、ETag
等响应头。
- 查看
2. 命令行调试
1 | # 查看资源响应头 |
注意事项
强缓存风险
- 避免长期强缓存:若资源更新,需通过版本号或哈希名强制更新。
- Expires 时间依赖客户端时钟:建议优先使用
Cache-Control
。
协商缓存优化
- ETag 优先级:若同时存在
ETag
和Last-Modified
,服务器优先验证ETag
。
- ETag 优先级:若同时存在
安全配置
- 对敏感资源(如用户数据)禁用缓存:
1
add_header Cache-Control "no-store, private";
常见问题解答
Q1:如何强制浏览器更新强缓存资源?
- 修改文件名(如
main.js
→main_v2.js
)或添加查询参数(如?v=2
)。
Q2:为什么协商缓存返回 200 而非 304?
- 服务器检测到资源已修改,需返回新内容。检查
Last-Modified
或ETag
是否变化。
Q3:如何调试缓存配置?
- 清除浏览器缓存后重新加载,观察 Network 标签中的响应头和状态码。
相关资源
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果