CDN 原理与应用
CDN 是建站实践里最常见的性能设施之一,但它真正重要的地方不在“全球节点”这句广告词,而在于你是否理解:
- 什么内容适合缓存
- 缓存命中和回源到底意味着什么
- 为什么同一个站点里有的资源应该长缓存,有的绝不能缓存
这篇要解决什么
一句话版本:CDN 不是神秘加速器,它本质上是“把适合重复读取的内容提前分发到离用户更近的地方”。
什么是 CDN
CDN 是 Content Delivery Network,内容分发网络。
你可以把它理解成站在用户和源站之间的一层:
- 用户先访问 CDN 节点
- 节点如果有缓存,就直接返回
- 节点没有缓存,才去源站取内容
- 取到后再按规则决定是否缓存
为什么建站时经常要接 CDN
一个网站的很多资源天然适合被重复访问:
- HTML 页面
- 图片
- CSS
- JavaScript
- 字体文件
- 下载文件
如果每次都回源站,不仅慢,也会给源站增加无谓压力。CDN 的价值就在于把这些“高复用内容”尽量挡在边缘层处理掉。
CDN 如何工作
一个最小流程通常是:
- 用户请求
https://example.com/logo.png - CDN 节点先查本地有没有这份缓存
- 如果命中,直接返回给用户
- 如果没命中,CDN 回源到你的对 象存储、静态托管平台或服务器
- 源站返回资源后,CDN 再决定是否缓存,以及缓存多久
这里最关键的两个词是:
- 缓存命中:节点本地有可用副本
- 回源:节点本地没有,需要向源站重新拿
适合使用 CDN 的内容类型
静态内容
- 图片、视频、音频
- CSS、JavaScript、字体
- 静态 HTML
- PDF、压缩包、安装包等下载资源
- 静态站生成器的构建产物
这类内容最适合 CDN,因为它们通常更新频率不高、用户间差异小、重复读取概率高。
哪些内容不能简单长缓存
下面这些内容要更小心:
- 用户个人资料页
- 购物车、订单、结算页
- 后台管理页面
- 带登录态的 API
- 依赖 Cookie、Authorization 或地区的页面
静态内容接入 CDN 的常见步骤
1. 明确源站类型
先确认你后面接的到底是:
- 静态托管平台
- 对象存储
- 自建服务器
- 动态应用服务
2. 配置 DNS
把域名解析指向 CDN 提供商指定的地址。常见形式是添加一条 CNAME 记录:
www.example.com CNAME cdn.example-cdn.com
3. 配置缓存规则
至少要明确:
- 哪些路径缓存
- 缓存多久
- 哪些参数参与缓存键
- 哪些请求必须绕过缓存
4. 检查源站响应
确认源站返回的状态码、内容类型和缓存头都合理。
5. 测试缓存命中
通过浏览器开发者工具或响应头检查资源是否真的经过 CDN,以及是否发生命中。
你真正要理解的缓存头
Cache-Control: public, max-age=31536000适合带版本号的静态资源Cache-Control: public, max-age=300适合短时间可复用的公开内容Cache-Control: private更偏向浏览器私有缓存Cache-Control: no-store表示不要缓存
最容易踩的坑
1. 把 HTML 和静态资源设成同样的长缓存
这样最容易出现“页面结构已经变了,但入口还是旧的”问题。
2. 忘记版本控制
静态资源如果没有文件名哈希、版本号或明确刷新策略,就很难安全地长缓存。
3. 把登录态页面缓存成公共内容
轻则显示错页面,重则造成信息泄露。
4. 看到 CDN 就以为源站可以随便配
CDN 不是万能补丁。源站的缓存头、内容类型、压缩和响应码都仍然重要。
总结
CDN 的核心不是“神秘地加速”,而是:
- 让适合缓存的内容尽量不回源
- 让不适合缓存的内容也能更稳定地经过边缘层
- 用缓存策略把性能和正确性同时守住
适合接着读什么
- 先把协议安全链路补齐:HTTP 与 HTTPS
- 想知道 Cloudflare 这类平台怎么落到实操:Cloudflare 接入、代理与 HTTPS 全链路
- 想继续看性能优化:Web 性能基础:从首屏到缓存策略