网站离你那么远,为什么还这么快?

发布 · 更新于 · 视频 2:13 · 约 4 分钟读完 · #网络基础#CDN#缓存

很多网站的服务器远在海外,打开却几乎是秒开。靠的是 CDN(Content Delivery Network,内容分发网络):网站在世界各地放了很多「门店」,提前备好货,你在家门口就能拿到。下面分 6 步讲清楚。

6 步看懂 CDN

1. 为什么秒开#▶ 从这里看

  • 数据在光纤里跑得很快,但不是瞬间到达:光在光纤中大约每毫秒走 200 公里,约为真空光速的三分之二。
  • 实测上海到洛杉矶,一来一回(RTT,往返时延)平均约 135–140 毫秒。1
  • 打开一个网页不止来回一次:建立连接、加密握手、请求页面,再加上页面里的图片、脚本、样式,往往要来回好几趟,延迟会叠加起来。2

2. 都去总仓又远又挤#▶ 从这里看

  • 网站自己的服务器叫源站(origin),就像网店唯一的总仓。
  • 所有访问者都直接找源站,会有两个问题:离得远的人慢;人一多源站扛不住,带宽和计算资源都可能被占满。2

3. 各地开门店#▶ 从这里看

  • CDN 在世界各地部署了大量服务器,叫边缘节点(edge),就是各地的门店。2
  • 图片、视频、JavaScript、CSS、字体这类静态资源不常变化,最适合提前放到门店里。
  • 门店离你近,来回一趟的时间就短。按光纤速度推算,一两百公里的距离往返只需一两毫秒,加上设备处理,同城访问通常是几毫秒的量级。

4. DNS 指到就近的店#▶ 从这里看

  • 接第三期:浏览器访问网站前,要先问 DNS「这个域名的 IP 地址是多少」。
  • 用了 CDN 的网站,通常用一条 CNAME 记录把域名交给 CDN 的 DNS 来回答。CDN 会根据你的大致位置、各节点的负载和网络状况,返回一个合适节点的地址。
  • 严格说,CDN 看到的往往是递归解析器(查号台)的位置,而不是你本人。所以有了 EDNS 客户端子网(ECS)这个扩展,让解析器把你所在网段的一部分信息带给 CDN,帮它选得更准。3
  • 有的 CDN 还用任播(anycast):很多节点共用同一个 IP 地址,由网络路由送到其中一个,通常是路由上较近的那个。第三期讲的根服务器也是这样部署的。

5. 门店没货就回源#▶ 从这里看

  • 门店里正好有你要的东西,直接返回,叫缓存命中(cache hit)。
  • 门店里没有,就去源站取一份,交给你的同时自己存一份,叫回源,这次属于未命中(cache miss)。下一个人来就能直接命中。
  • 货有保质期:源站用 Cache-Control 响应头告诉缓存能存多久,比如 Cache-Control: max-age=3600 表示一小时内是新鲜的;s-maxage 专门给 CDN 这类共享缓存用。过期后,缓存会回源确认或重新取。45
  • 网站更新了内容,可以主动让 CDN 清除(purge)旧缓存,或者换一个新文件名(比如 app.3f9a.js),让门店把它当成新货。5

6. 回顾#▶ 从这里看

  • DNS 把你带到就近的门店 → 有货直接给(命中)→ 没货回总仓取一份留着(回源)→ 东西按保质期过期、更新。
  • 好处有三:路近了更快、源站压力小了、某个节点出问题还能换别的节点。
  • 订单、余额、购物车这类每个人都不一样的内容,一般不在门店缓存,仍要回源站处理。

深入一问

CDN 和浏览器缓存是一回事吗? 不是。浏览器缓存存在你自己的设备上,只给你一个人用;CDN 的缓存存在边缘节点上,附近的人共用。两者都看 Cache-Control,可以同时起作用。4

用了 CDN,源站就藏起来了吗? 大部分请求先到 CDN,访问者看到的通常是 CDN 节点的地址,能挡掉一部分直接打到源站的流量。但源站地址如果从别处泄露,仍可能被直接访问,所以源站一般还要设置成只接受 CDN 的连接。

小网站需要 CDN 吗? 访问者集中在一个地方、流量也不大的话,收益有限;访问者分散在各地,或者图片视频很多,收益就很明显。不少静态网站托管服务本身就带 CDN。

易错点

  • ❌ 「用了 CDN,整个网站都被复制到门店了」→ ✅ 门店主要缓存静态资源,个性化、实时的内容通常还是回源站。
  • ❌ 「CDN 只是让下载变快」→ ✅ 它还能分担源站压力,节点出故障时能换别的节点。
  • ❌ 「DNS 一定能找到离我最近的节点」→ ✅ 它多半按解析器的位置判断,换了公共 DNS 有时会被分到较远的节点,ECS 就是为缓解这个问题。3
  • ❌ 「网站一更新,门店立刻换新」→ ✅ 要等缓存过期,或者网站主动清除旧缓存、换新文件名。

参考资料

Footnotes

  1. WonderNetwork, Global Ping Statistics: Shanghai and Los Angeles,2026-09-28 至 2026-10-12 每小时实测,访问于 2026-10-12。 ↩

  2. MDN, CDN(Glossary),访问于 2026-10-12。 ↩ ↩2 ↩3

  3. IETF, RFC 7871: Client Subnet in DNS Queries, 2016-05(现行 RFC,Informational)。 ↩ ↩2

  4. IETF, RFC 9111: HTTP Caching, 2022-06(现行标准)。 ↩ ↩2

  5. MDN, HTTP caching,访问于 2026-10-12。 ↩ ↩2

幕后

这部片子完全由代码生成。