指南

什么是 CDN?内容分发网络通俗讲解

CDN(内容分发网络)是一个分布在许多城市的服务器网络,它们保存着你网站文件的副本,包括图片、脚本、样式表,有时还包括整个页面。当有人访问你的网站时,会从离他们较近的地点获取内容,而不是从远处的某台服务器获取。这样页面加载更快,减轻了你自己服务器的负担,也让网站更能应对访问量的突然激增。

用 AI 做网站时,为什么 CDN 很重要

你可能从来没有亲自设置过 CDN,因为许多托管平台会自动在你的网站前面放置一个。但你会感受到它的影响:

  • 速度。 页面加载更快,访客会停留得更久,而且这也是搜索引擎会考虑的因素之一。参见如何让你的网站更快。
  • “为什么我的修改没有显示出来?” 发布更新之后,旧版本的缓存副本可能会在一段时间内仍然存在。了解原因可以省去很多困惑。
  • 隐私与正确性。 如果 CDN 缓存了错误的内容,比如包含某个用户个人信息的页面,下一位访客就可能看到它。了解哪些内容应该缓存、哪些不应该,有助于你问对问题。

日常类比

想象一家面包店只在一家门店里卖面包,而却要全国供应。每位顾客,无论住得多远,都得等待从这一家店配送过去,而在繁忙的日子里,排队的人会非常多。

CDN 就像在全国各地的便利店里都摆上同样的面包。顾客可以就近、快速地买到,而总店只需要偶尔给便利店补货。但也有个问题:当面包店改了配方,便利店仍会继续卖旧的面包,直到他们被告知要换掉,或者旧库存过期为止。

CDN 的工作原理

  1. 源站。 你的网站存放在主服务器或托管平台上,这被称为源站(origin)。
  2. 边缘节点。 CDN 在许多地方运行服务器,称为边缘节点(edge location)或接入点(PoP,point of presence)。
  3. 路由。 当访客请求你的网站时,DNS 或网络路由会把他们导向附近的边缘节点。参见域名和 DNS 如何工作。
  4. 缓存命中。 如果该边缘节点已经有一份新鲜的文件副本,就会立即发送给访客。
  5. 缓存未命中。 如果没有,边缘节点会从源站获取文件,发送给访客,并保存一份副本供下一位访客使用。
  6. 过期。 每份副本保存的时间由你的服务器发送的缓存标头(cache headers)控制,或者直到它被清除为止。

实际例子:一个带照片的作品集网站

一位摄影师的作品集网站有首页、一个包含 60 张大图的画廊,以及一个联系表单。源站位于欧洲。一位新加坡的访客打开了画廊。

  • 没有 CDN: 每张图片都要从欧洲传过来。每次请求都要跨越半个地球往返,因此画廊会慢慢加载出来。
  • 有 CDN: 新加坡附近的第一位访客会让那里的边缘节点获取并保存这些图片。之后该地区的每位访客都能从附近快速获取。

现在,摄影师替换了首页的主图并重新发布。以下内容决定了访客是否能看到更新:

/index.html                    → 缓存时间短,频繁检查
/assets/index-3f9a2c.js        → 缓存时间长
/assets/hero-8b41d0.jpg        → 缓存时间长

包括 Vite 在内的现代构建工具,会为文件赋予哈希文件名,比如 hero-8b41d0.jpg。文件内容改变时,文件名也会随之改变,因此页面请求的是一个所有缓存都没见过的全新文件。HTML 页面本身只缓存很短的时间,因此它很快就会指向新文件。这就是同时获得长期缓存和及时更新的标准做法。

联系表单则不同。它的提交每次都要发送到服务器,因此绝不应该被缓存。

哪些内容该缓存,哪些不该

通常长期缓存通常短期缓存共享 CDN 中不应缓存
图片、字体、视频公开网站的 HTML 页面登录后的页面、仪表板
带哈希文件名的 JavaScript 和 CSS偶尔变化的公开 API 数据任何包含个人数据的内容
很少变化的可下载文件表单提交、支付,以及任何 POST 请求

关键术语

术语含义
源站(Origin)你的主服务器或主机,真正的文件存放在这里。
边缘节点 / PoP为附近访客提供服务的 CDN 节点。
缓存命中 / 未命中边缘节点已有该文件 / 需要从源站获取该文件。
TTL生存时间(Time to live),即缓存副本被保留的时长。
Cache-Control 标头你的服务器发送的指令,说明某内容是否可以缓存以及缓存多久。
清除 / 失效(Purge / invalidate)通知 CDN 立即丢弃缓存副本。
缓存破坏(Cache busting)内容变化时更改文件的名称或 URL,使缓存去获取新版本。
延迟(Latency)由距离和网络跳数造成的延迟。

关于更广义的缓存(浏览器、服务器和数据库中的缓存),参见什么是缓存。

常见误解

  • “CDN 能让一切都变快。” 它只能加快文件的传输。服务器上缓慢的数据库查询或缓慢的 AI 调用依然很慢。
  • “CDN 可以取代托管。” 它位于你的托管之前。你仍然需要一个源站。
  • “我更新了网站,所有人就会立即看到。” 旧副本可能会在 CDN 和浏览器中残留一段时间。可以通过强制刷新来检查,并使用哈希文件名。
  • “缓存总是安全的。” 在共享缓存中缓存个性化页面存在真实的隐私风险。私有响应应当被标记为不可缓存。
  • “CDN 只适用于大公司。” 许多主机即使对小网站也会免费提供 CDN,无需额外操作。

向你的 AI 生成工具提出的要求

  • “这个网站前面有 CDN 吗?它缓存了哪些文件,缓存多久?”
  • “确保构建后的 JavaScript、CSS 和图片使用哈希文件名并设置较长的缓存时间,而 HTML 设置较短的缓存时间。”
  • “绝不要在共享缓存中缓存登录后的页面,或包含个人数据的 API 响应。”
  • “压缩并调整图片尺寸,让画廊加载得更快。”
  • “我已经发布了更新,但仍然看到旧版本,这是浏览器缓存的问题还是 CDN 的问题?”

CDN 与 Mythex

在 Mythex 上发布时,静态前端会被部署为静态站点,而文档中说明,CDN 缓存在更新后可能会有短暂的延迟:如果你重新发布后仍然看到旧版本,请对公开 URL 进行强制刷新。这一点无需任何配置。如果你连接的自定义域名,其 DNS 托管在 Cloudflare 上,文档会要求你将该记录设置为“仅 DNS”而非代理(proxied),这样 Mythex 才能正确签发 HTTPS 证书。参见文档中的如何发布和自定义域名,以及我们的网站托管指南。

常见问题

简单来说,什么是 CDN?

CDN(内容分发网络)是由分布在许多地点的服务器组成的网络,它们保存着你网站文件的副本。访客会从离他们较近的节点获取内容,而不是从你的主服务器获取,因此页面加载更快,你的服务器也承担更少的工作。

我更新网站后,为什么还能看到旧版本?

通常是因为旧文件的副本被缓存了,可能在 CDN 中,也可能在浏览器中,或者两者都有。强制刷新可以解决浏览器这一侧的问题;CDN 中的副本会自行过期,或者可以被清除。构建工具会通过为改动过的文件赋予新名称,来避免大部分这类问题。

小型网站需要 CDN 吗?

很多时候你不用选择,就已经拥有 CDN 了,因为许多托管平台会自动在网站前面放置一个 CDN。如果你的平台没有,而且访客分布在不同国家,那么添加一个通常是值得的。

CDN 能缓存我应用的数据和登录后的页面吗?

CDN 可以缓存任何被允许缓存的内容,所以必须谨慎地进行设置。图片、脚本和样式表等公共文件非常适合缓存。个人或登录后的内容通常不应该缓存在共享 CDN 中,否则一个用户可能会看到另一个用户的数据。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)