CDN

返回 计算机网络

CDN(Content Delivery Network,内容分发网络)通过在全球分布的边缘节点缓存静态资源,让用户从距离最近的节点获取内容,降低延迟、减轻源站压力。


工作原理

用户请求 img.example.com/logo.png
  1. DNS 解析返回最近的 CDN 边缘节点 IP(通过 CNAME + 智能 DNS)
  2. 边缘节点命中缓存 → 直接返回
  3. 边缘节点未命中 → 回源到源站拉取,缓存后返回

智能 DNS 调度

CDN 通过 CNAME 接管域名解析,DNS 服务器根据用户 IP 地理位置、运营商、节点负载返回最优边缘节点 IP。


缓存策略

资源类型典型 Cache-Control说明
图片、字体、JS/CSS(含 hash)max-age=31536000, immutable文件名含内容 hash,永久缓存
HTMLno-cache 或短 TTL需要及时更新
API 响应通常不缓存动态数据

缓存刷新:

  • 文件名加 hash(app.abc123.js)是最可靠的缓存失效方式
  • CDN 控制台手动刷新 URL 或目录
  • 通过 API 批量刷新

核心功能

功能说明
静态资源加速图片、JS、CSS、视频就近分发
HTTPS 卸载边缘节点处理 TLS,减轻源站 CPU
DDoS 防护流量清洗,隐藏源站真实 IP
图片处理按需压缩、裁剪、格式转换(WebP)
边缘计算在边缘节点执行逻辑(Edge Functions)

主流 CDN 服务商

服务商特点
Cloudflare全球覆盖广,免费套餐,边缘计算 Workers
AWS CloudFront与 AWS 生态深度集成
阿里云 CDN国内节点覆盖好,适合国内业务
腾讯云 CDN国内节点覆盖好,游戏加速强
Fastly实时缓存清除,边缘计算

前端接入示例

<!-- 静态资源通过 CDN 域名引用 -->
<link rel="stylesheet" href="https://cdn.example.com/css/app.abc123.css">
<script src="https://cdn.example.com/js/app.def456.js"></script>
<img src="https://cdn.example.com/images/logo.png">

Vite / Webpack 构建时配置 publicPath / base 指向 CDN 域名,构建产物自动带 hash。


缓存命中率优化

缓存命中率(Cache Hit Rate)= 边缘命中请求数 / 总请求数,越高源站压力越小。

提高命中率的常见手段:

手段说明
文件名加 Hashapp.abc123.js 保证内容变化时 URL 变化,旧文件可永久缓存
规范化查询参数忽略或排序无关参数,避免同一资源被缓存为多份
合理设置 TTL静态资源大 TTL,动态内容短 TTL 或不缓存
预热(Cache Warm)发布后主动将资源推送到边缘节点,防止冷启动回源风暴
压缩缓存边缘节点存储并返回 gzip/Brotli 压缩版本

回源策略

边缘节点缓存过期或未命中时,向上游拉取资源:

用户 → 边缘节点(L1)→ 区域节点(L2)→ 源站
              ↑ 二级缓存减少直接回源
  • 单源:所有节点回同一个源站
  • 多源 / 源站组:多个源站轮询或权重调度,用于高可用
  • 源站保护:并发回源合并(Collapse),同一资源同时只有一条回源请求,防止缓存击穿

CDN 安全功能

功能说明
WAF(Web 应用防火墙)过滤 SQL 注入、XSS、CC 攻击等七层威胁
DDoS 流量清洗边缘节点吸收攻击流量,隐藏源站真实 IP
防盗链校验 Referer,拒绝非授权域名引用资源
URL 鉴权(Token 防盗链)URL 带时效签名,过期或签名错误返回 403
IP 限速 / 黑名单对单 IP 请求频率限制,封禁恶意 IP
Bot 管理区分爬虫、扫描器与正常用户
# Token 鉴权 URL 示例
https://cdn.example.com/video/a.mp4?token=abc123&expires=1716000000

CDN 与 CORS

静态资源通过 CDN 分发时,需确保边缘节点正确透传或补充 CORS 响应头:

# 源站响应头(需包含)
Access-Control-Allow-Origin: https://www.example.com
Vary: Origin
 
# CDN 必须缓存 Vary: Origin,否则不同来源的用户可能收到错误的缓存响应

部分 CDN(如 Cloudflare)支持在边缘规则中统一添加 CORS 头,无需修改源站。


视频流媒体加速

协议说明CDN 支持
HLS(HTTP Live Streaming)切片为 .ts + .m3u8 索引,HTTP 分发广泛支持,可缓存切片
DASH自适应码率,.mpd 描述文件 + 分段支持
RTMP推流常用,低延迟,但 CDN 缓存能力弱部分支持

CDN 对 HLS/DASH 切片文件(通常 2-10 秒)的缓存效果极好,可大幅降低直播/点播带宽成本。


边缘计算(Edge Functions)

在 CDN 边缘节点执行逻辑,无需回源,极低延迟:

平台产品运行时
CloudflareWorkersV8 isolates
AWS CloudFrontLambda@Edge / CloudFront FunctionsNode.js
FastlyCompute@EdgeWasm
VercelEdge FunctionsV8 isolates

典型用途:A/B 测试、请求重写/重定向、鉴权校验、个性化响应头、地理围栏。

// Cloudflare Workers 示例:为所有响应添加安全头
addEventListener('fetch', event => {
  event.respondWith(addSecurityHeaders(event.request))
})
 
async function addSecurityHeaders(request) {
  const response = await fetch(request)
  const newHeaders = new Headers(response.headers)
  newHeaders.set('X-Frame-Options', 'DENY')
  newHeaders.set('X-Content-Type-Options', 'nosniff')
  return new Response(response.body, { ...response, headers: newHeaders })
}

相关

  • 网络性能 — CDN 降低延迟的原理与量化分析
  • DNS — CDN 通过 CNAME 和智能 DNS 调度流量
  • HTTP — CDN 缓存 HTTP 响应,依赖 Cache-Control
  • TLS — CDN 边缘节点承担 TLS 握手
  • HTTPS — 源站与边缘 HTTPS
  • IP与路由 — CDN 基于 IP 地理位置路由
  • 网络安全 — CDN 提供 DDoS 防护和 WAF
  • 通信协议 — CDN 支持的协议(HTTP/2、HTTP/3、QUIC)