🎬 HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

一、强缓存

二、协商缓存

三、缓存策略选择建议

四、用户行为对缓存的影响

总结



一、强缓存

原理:浏览器直接判断本地缓存是否过期,未过期则直接使用缓存,不发送请求到服务器
响应头字段

  • Expires(HTTP/1.0):指定缓存的绝对过期时间(如 Expires: Wed, 21 Oct 2025 07:28:00 GMT)。
    问题:依赖客户端时间,可能因时间不同步导致缓存失效不准确。
  • Cache-Control(HTTP/1.1):更灵活,常用指令:
    • max-age=3600:缓存有效期(秒),优先级高于 Expires
    • public:允许代理服务器缓存。
    • private:仅浏览器可缓存。
    • no-store:彻底禁用缓存。
    • no-cache:缓存但需向服务器验证(实际属于协商缓存)。

解决的问题

  • 减少重复请求:对静态资源(如图片、CSS)设置较长 max-age,减少带宽消耗。
  • 提升加载速度:直接从本地读取,无需网络延迟。

适用场景

  • 版本化的静态资源(如 style.v1.css),通过修改URL触发重新加载。

二、协商缓存

原理:浏览器向服务器验证缓存是否过期,若未修改则返回 304 Not Modified,否则返回新资源。
请求/响应头字段

  1. 基于时间戳

    • 响应头 Last-Modified:资源最后修改时间。
    • 请求头 If-Modified-Since:携带 Last-Modified 的值,服务器对比时间决定是否返回新内容。
      问题:1秒内多次修改可能无法检测;文件内容未变但修改时间变化(如重新生成)会导致无效请求。
  2. 基于内容哈希

    • 响应头 ETag:资源的唯一标识符(如哈希值)。
    • 请求头 If-None-Match:携带 ETag 的值,服务器对比标识符判断是否更新。
      优势:精确检测内容变化,避免时间戳缺陷。

解决的问题

  • 确保资源最新性:适合频繁更新的资源(如用户动态数据)。
  • 减少无效传输:仅当资源变化时返回完整内容,节省带宽。

适用场景

  • 动态接口、频繁更新的HTML页面。

三、缓存策略选择建议

  1. 静态资源

    • 强缓存 + 文件名哈希(如 app.abc123.js),设置 Cache-Control: max-age=31536000(1年)。
    • 更新文件时修改URL,确保用户获取最新版本。
  2. 动态内容

    • 使用 Cache-Control: no-cachemax-age=0,配合 ETagLast-Modified 进行协商缓存。
  3. 敏感数据

    • 使用 Cache-Control: private, no-store 禁止缓存(如用户隐私信息)。

四、用户行为对缓存的影响

操作 强缓存 协商缓存
正常访问 生效 生效
页面刷新(F5) 跳过 生效
强制刷新(Ctrl+F5) 跳过 跳过

总结

  • 强缓存:性能优先,适用于不变资源。
  • 协商缓存:准确性优先,适用于可变资源。
    合理组合两者可显著提升Web应用性能,同时确保内容及时更新。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐