Section 1:沒有 CDN 的世界是什麼樣子?
在深入理解 CDN 之前,先想像一個沒有 CDN 的場景:你在高雄的電腦上,打開一個伺服器架在美國東岸的網站。 每一個請求——HTML、CSS、JavaScript、圖片——都需要跑完整的美洲太平洋路線。
沒有 CDN:台灣用戶訪問美國伺服器
有 CDN:資料近在咫尺
CDN 的核心理念只有一句話:「把資料放到距離用戶最近的地方」。 這個看似簡單的想法,背後是全球數百個 PoP 節點的基礎建設,以及複雜的快取管理機制。
為什麼延遲很重要?數字說話
100ms
Amazon 研究:每 100ms 延遲損失 1% 銷售額
53%
Google 研究:行動用戶在 3 秒內未載入完成就會離開
10×
CDN 帶來的延遲改善倍數(跨洲際場景)
Section 2:CDN 如何工作?
CDN 的運作核心是「快取」。每個 CDN 的 PoP(Point of Presence,接入點)節點都有本地的儲存空間。 當用戶發出請求時,CDN 會先檢查本地是否有這份資源的副本,根據結果分三種情況處理。
三種快取狀態:Hit、Miss、Stale
HTTP Cache Headers:告訴 CDN 如何快取
CDN 不會自己決定要快取什麼、快取多久——一切都由 HTTP Response Headers 控制。 最重要的 Header 是 Cache-Control。
s-maxage vs max-age:max-age 對瀏覽器和 CDN 都有效,s-maxage(shared maxage)只對 CDN 等共享快取有效。 當兩個同時出現,CDN 優先使用 s-maxage。 這讓你可以給 CDN 更長的快取時間,同時控制瀏覽器更短的快取時間。
Section 3:Cache Invalidation — 快取更新的藝術
「電腦科學中有兩件真正難的事:命名,以及快取失效(Cache Invalidation)。」 — Phil Karlton(Netscape 工程師)
快取的問題在於:當你設定了 1 小時的快取,但 5 分鐘後你發現內容有錯誤需要更新,怎麼辦? 這就是快取失效(Cache Invalidation)要解決的問題。以下是三種主要策略。
策略一:Purge by URL(即時清除特定 URL)
最直接的方式:呼叫 CDN 的 API,強制刪除特定 URL 的快取副本。 下次有用戶請求時,CDN 會重新向 Origin 拉取最新內容。
限制:你必須知道所有受影響的 URL。如果一篇文章同時出現在首頁、分類頁、標籤頁, 你需要清除所有相關的 URL,容易遺漏。
策略二:Cache-Busting(快取破壞)
不直接清除快取,而是改變 URL,讓 CDN 把它當作全新的資源來處理。 舊 URL 的快取會自然過期,新 URL 會建立新的快取。
優點:不需要呼叫 CDN API,完全由 Build 工具自動處理,零運維成本。
限制:只適合靜態資源(JS、CSS、圖片),不適合動態 API 響應(URL 固定)。
策略三:Surrogate Keys(Cache Tags)
最強大的策略:給快取的內容打「標籤(Tag)」,然後可以一次性清除所有帶某個標籤的快取。 Cloudflare、Fastly 都支援這個功能。
三種策略的選用時機:靜態資源(JS/CSS)優先用 Cache-Busting(Build 工具自動處理); API 響應且有明確 URL 時用 Purge by URL;API 響應且一個資源會影響多個 URL 時,用 Surrogate Keys。 大型系統通常三種策略並用。
Section 4:Edge Computing — 在 CDN 節點上執行程式碼
傳統 CDN 只能快取靜態資源:HTML、JS、CSS、圖片。 如果你需要執行邏輯(驗證、個人化、A/B 測試),請求就必須一路跑到 Origin Server。
Edge Computing 改變了這個模式:它讓你可以在 CDN 的 PoP 節點上直接執行 JavaScript, 在靠近用戶的地方完成邏輯處理,不需要再跑一趟 Origin。
Cloudflare Workers 實際範例
Cloudflare Workers 是目前最成熟的 Edge Runtime,在全球 300+ 個節點上執行, 使用標準的 Web APIs(Request、Response、fetch)撰寫。
Section 5:Next.js 與 CDN 的最佳實踐
Next.js App Router 對 CDN 優化有完善的支援。理解這些設定可以讓你的應用在 Vercel、Cloudflare 或任何 CDN 上都能達到最佳效果。
next.config.ts 設定
API Route 的快取設定
Section 6:CDN 的選型與架構決策
市場上主要的 CDN 提供商各有其定位。以下是三個最常見選項的比較,以及如何根據你的架構做選擇。
Cloudflare
最大全球網路 · 安全優先
優點
- • 300+ PoP,覆蓋全球最廣
- • 內建 DDoS 防護、WAF
- • 免費方案可用(個人網站夠用)
- • Cloudflare Workers:強大的 Edge Runtime
- • Cache-Tag 支援,快取失效精準
考量
- • 需要將 DNS 移至 Cloudflare 管理
- • Enterprise 功能費用較高
Edge Runtime
Cloudflare Workers(全球最快)
適合
大多數網站,尤其需要安全保護時
AWS CloudFront
AWS 生態整合 · 企業首選
優點
- • 與 S3、EC2、API Gateway 無縫整合
- • Origin Shield:減少到 Origin 的請求
- • 細緻的快取行為設定
- • 支援 WebSocket、HTTP/3
考量
- • 配置較複雜,學習曲線陡
- • PoP 數量不如 Cloudflare(600+)
- • 費用按流量計算,大流量較貴
Edge Runtime
Lambda@Edge / CloudFront Functions
適合
已在 AWS 生態的企業團隊
Vercel Edge Network
Next.js 深度整合 · 零配置
優點
- • 與 Next.js App Router 深度整合
- • 零配置:部署即自動啟用 CDN
- • ISR(Incremental Static Regeneration)
- •
revalidateTag()/revalidatePath()
考量
- • 綁定 Vercel 平台(Vendor lock-in)
- • Pro 方案後費用較高
- • 自訂空間不如 Cloudflare
Edge Runtime
Vercel Edge Functions
適合
Next.js 應用,快速交付優先
CDN 快取命中率診斷
部署 CDN 後,如何確認快取是否真的在運作?用curl 查看 Response Headers 是最快的方式。
CDN 效能優化 Checklist
- ✓ 靜態資源(JS/CSS)使用 Content Hash 命名,設定永久快取
- ✓ 圖片設定至少 30 天快取,啟用 WebP/AVIF 自動轉換
- ✓ API 響應加上
Cache-Tag便於精準失效 - ✓ 個人化內容使用
Cache-Control: private - ✓ 定期用 curl 確認 CF-Cache-Status: HIT
- ✓ 在 CDN Dashboard 監控快取命中率,目標 > 90%