CDN 是什么?回源、缓存刷新和缓存命中率应该怎么理解?
🧑💻 面试官:CDN 为什么快?
🙋♂️ 我:把静态资源放到离用户近的服务器。
🧑💻 面试官:同一个地址返回不同用户的数据,能放进同一个缓存吗?
🙋♂️ 我:不能,需要区分或不共享缓存。
🧑💻 面试官:刚更新文件用户还看到旧图,清 CDN 缓存就一定解决了吗?
CDN 不只是就近存文件,还要定义缓存键、有效期与失效路径;命中错内容比不命中更糟。
面试速答(60 秒版)
CDN 通过边缘节点分发内容,缓存命中时减少回源访问与传输距离,但不保证所有用户物理最近或所有请求都缓存。
缓存键决定哪些请求共用表示,可能涉及路径、查询参数、请求头和 Cookie 等策略。不能忽略影响响应的维度,也不能把无关参数全部加入导致命中率很低。
新鲜度、验证和主动失效要一起设计。HTTP no-cache 是使用前验证,不等于禁止存储;no-store 才表达不存储意图,还需确认 CDN 配置没有覆盖期望。
静态资源常用内容版本化地址,HTML 采用合适策略。更新后还要检查浏览器缓存、边缘缓存、回源负载和实际响应,不能只刷新一个层。

知识点详解:缓存命中之前,先保证大家拿的是同一份内容
边缘命中和回源是两条路径
假设用户读取版本化图片。边缘已有可使用的表示,直接返回;未命中或需要验证时,按部署路径向上游或源站获取。
CDN 还可以有分层缓存、请求合并和流量调度,具体依赖产品。源站慢、首个未命中和动态处理不会因为有 CDN 就全部消失。
观察要分命中请求延迟与回源请求延迟,不只看整体平均数。
缓存键遗漏维度,会让不同请求共用错误内容
假设 /profile 根据登录 Cookie 返回个人资料,但共享缓存只按路径区分,就可能复用不属于当前用户的响应。
公共页面若按语言返回不同版本,也要把必要维度放进正确策略。反过来,把随机追踪参数全计入键,又会让相同内容产生许多副本。
转发到源站的字段与计入缓存键的字段并不一定相同,必须核对产品配置。个性化和授权内容尤其需要谨慎,不用命中率掩盖泄露风险。
到期、验证和失效各有作用
max-age、s-maxage 等表达不同缓存范围的新鲜度,验证器可以帮助判断已有表示是否还能用。no-cache 不等于不保存,它要求按规则验证后使用。
主动失效可以清除指定边缘对象,但浏览器中已经保存的副本不一定被远程清掉。使用内容版本化路径,可以让新页面引用新资源,同时保留旧页面所需旧文件。
具体产品还有 TTL 下限、上限和策略。以 CloudFront 为例,非零最小 TTL 会影响某些源站缓存头的预期效果,不能只检查应用代码。
缓存一起失效时,源站承不承受得住
假设热门资源大批到期,许多边缘同时回源,会把平时命中节省的请求集中压到源站。预热、错开过期或相关陈旧内容策略要结合产品能力评估。
更新上线先看正确版本,再看边缘命中、回源错误、带宽和成本。敏感内容不得为了稳定就随意允许陈旧副本继续使用。
面试答案讲到这里,CDN 就从“更近的服务器”变成了可验证的分发与缓存方案。
本题机制参考:HTTP Caching RFC 9111、CloudFront 缓存键、CloudFront 有效期、CloudFront 失效。
面试官继续追问
用了 CDN,源站就不用扩容了吗?
不是。未命中、动态请求和集中回源仍依赖源站容量。
no-cache 和 no-store 相同吗?
不同。前者允许保存但使用前按规则验证,后者表达禁止存储;具体部署还需检查策略。
清边缘缓存会清掉浏览器缓存吗?
通常不能这样认为。需要版本化、浏览器缓存策略或等待相关有效期。
面试速记卡
- 路径:边缘命中与回源分开。
- 缓存键:必须区分会改变响应的必要维度。
- 新鲜度:到期、验证和主动失效各有职责。
- 版本化:新 URL 配合页面更新,不是删光旧文件。
- 验收:正确内容、回源峰值、错误与成本。
公司面试真题
真题根据求职者公开面经整理,题意经过概括,非逐字原话或公司官方题库;本文为 Sunday 的独立解析。
腾讯 · 前端(TEG / QQ音乐 / PCG) · 暑期实习
CDN 如何工作?(题意整理)
腾讯暑期实习前端面经 + 总结 ↗
面试记录为 2020 年 3 月;原帖编辑于 2020-04-19