协商缓存和强缓存

协商缓存和强缓存是 HTTP 缓存机制的两种主要策略,它们的核心区别在于是否向服务器发送请求 以及如何处理缓存更新


✅ 强缓存(Strong Cache)

核心特点:

  • 不发送请求:浏览器直接从本地缓存(disk 或 memory)读取资源。
  • 状态码: 200 (from disk cache)200 (from memory cache)
  • 控制字段:
    • Cache-Control: max-age=秒数(推荐)
    • Expires: 绝对时间(已不推荐使用)
  • 适用场景: 不常变动的静态资源,如带指纹的 JS、CSS、图片等。

优点:

  • 最快速度,无网络开销。
  • 减少服务器压力。

缺点:

  • 更新不及时,用户可能在缓存有效期内看不到新版本。

✅ 协商缓存(Conditional Cache)

核心特点:

  • 发送请求 ,但不传输完整资源,而是向服务器验证资源是否更新。
  • 状态码:
    • 304 Not Modified → 使用缓存
    • 200 OK → 返回新资源
  • 控制字段:
    • ETag / If-None-Match(推荐)
    • Last-Modified / If-Modified-Since(次选)
  • 适用场景: 可能频繁更新的内容,如 HTML 页面、API 响应等。

优点:

  • 保证资源更新及时性。
  • 节省带宽,仅传输头部信息。

缺点:

  • 有网络请求延迟,性能略低于强缓存。

✅ 缓存使用顺序(浏览器行为)

  1. 首先检查强缓存 是否命中(Cache-ControlExpires)。
  2. 若强缓存未命中,则进入协商缓存流程,发送请求并带上验证字段。
  3. 服务器根据验证字段决定返回 304 还是新资源。

✅ 实际应用建议

类型 推荐配置示例 使用场景
强缓存 Cache-Control: max-age=31536000, immutable 带哈希的 JS/CSS/图片
协商缓存 Cache-Control: no-cache + ETag HTML、API 接口、动态内容

✅ 用户操作对缓存的影响

操作方式 强缓存是否生效 协商缓存是否触发
正常跳转/链接点击 ✅ 生效 ❌ 不触发
刷新(F5) ❌ 不生效 ✅ 触发
强制刷新(Ctrl+F5) ❌ 不生效 ❌ 不生效

✅ 总结一句话

强缓存 是"能用就别问",协商缓存是"过期了先问一句还能不能用"。

两者结合使用,能在性能和实时性之间取得最佳平衡。

相关推荐
JarvanMo37 分钟前
Flutter. FractionallySizedBox
前端
EndingCoder2 小时前
调试技巧:Chrome DevTools 与 Node.js Inspector
javascript·网络·electron·node.js·vim·chrome devtools
知识分享小能手2 小时前
React学习教程,从入门到精通, React 入门指南:React JSX 语法知识点详解及案例代码(8)
前端·javascript·vue.js·学习·react.js·前端框架·anti-design-vue
卓码软件测评2 小时前
第三方web测评机构:【WEB安全测试中HTTP方法(GET/POST/PUT)的安全风险检测】
前端·网络协议·安全·web安全·http·xss
学习3人组2 小时前
React 组件基础与事件处理
前端·javascript·react.js
qczg_wxg6 小时前
React Native的动画系统
javascript·react native·react.js
漂流瓶jz7 小时前
解锁Babel核心功能:从转义语法到插件开发
前端·javascript·typescript
周小码8 小时前
shadcn-table:构建高性能服务端表格的终极解决方案 | 2025最新实践
前端·react.js
大怪v8 小时前
老乡,别走!Javascript隐藏功能你知道吗?
前端·javascript·代码规范
ERP老兵-冷溪虎山8 小时前
Python/JS/Go/Java同步学习(第三篇)四语言“切片“对照表: 财务“小南“纸切片术切凭证到崩溃(附源码/截图/参数表/避坑指南/老板沉默术)
java·javascript·python·golang·中医编程·四语言同步学习·职场生存指南