什麼是 CDN?內容傳遞網路(CDN)白話解說
CDN(內容傳遞網路)是分布在許多城市的一組伺服器,保存你網站檔案的副本,包括圖片、腳本、樣式表,有時也包括整個頁面。當有人造訪你的網站時,會從離他們較近的地點取得內容,而不是從遠方的單一伺服器取得。這能讓頁面載入更快、減輕你自己伺服器的負擔,也讓網站更能應付流量高峰。
為什麼使用 AI 建置時 CDN 很重要
你可能從來不需要自己設定 CDN,因為許多託管平台會自動在你的網站前面放一層。但你仍然會感受到它的影響:
- 速度。 頁面載入更快,訪客才會留下來,而且這也是搜尋引擎會考量的因素之一。請參閱如何讓你的網站更快。
- 「為什麼我的修改沒有出現?」 發布更新後,舊版本的快取副本可能還會留存一小段時間。知道原因,就能省下很多困惑。
- 隱私與正確性。 如果 CDN 快取了錯誤的內容,例如包含某位使用者詳細資料的頁面,下一位訪客就可能看到。了解什麼該快取、什麼不該快取,能幫你問對問題。
日常生活的比喻
想像一間麵包店只在一間店面販售全國的麵包。每位顧客,不論住多遠,都得等待從這一間店配送過去,而在忙碌的日子裡,排隊的人潮非常可觀。
CDN 就像是在全國各地的便利商店都鋪貨同一款麵包。顧客可以就近快速取得,而總店只需要偶爾補貨給這些門市。問題在於:當總店改了配方,門市仍會繼續賣舊的麵包,直到被通知更換或舊貨過期為止。
CDN 如何運作
- 你的來源(origin)。 你的網站放在主伺服器或託管平台上,這就是所謂的來源。
- 邊緣節點。 CDN 在許多地方設有伺服器,稱為邊緣節點(edge location)或存在點(point of presence)。
- 路由。 當訪客發出請求時,DNS 或網路路由會把他導向附近的邊緣節點。請參閱網域與 DNS 如何運作。
- 快取命中。 如果該邊緣節點已有最新的檔案副本,就會立即送出。
- 快取未命中。 如果沒有,邊緣節點會向你的來源取得檔案、送給訪客,並保留一份副本供下一位訪客使用。
- 過期。 每份副本保存的時間,由你的伺服器送出的快取標頭決定,或在被清除之前一直保留。
實例:一個有照片的作品集網站
一位攝影師的作品集有首頁、一個有 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 快取在更新後可能會延遲一小段時間:如果重新發布後仍看到舊版本,請強制重新整理公開網址。這部分不需要額外設定。如果你連接的自訂網域,其 DNS 託管在 Cloudflare,文件會要求你把記錄設為「僅 DNS」而非代理,這樣 Mythex 才能正確簽發 HTTPS。請參閱文件中的如何發布與自訂網域,以及我們的網站託管指南。
常見問題
用簡單的話說,什麼是 CDN?
CDN(內容傳遞網路)是由分布在許多地點的伺服器組成的網路,這些伺服器保存你網站檔案的副本。訪客會從離他們較近的地點取得內容,而不是從你的主伺服器取得,因此頁面載入更快,主伺服器的負擔也更輕。
我更新網站後,為什麼還是看到舊版本?
通常是因為舊檔案的副本還留在快取中,可能在 CDN、瀏覽器,或兩者都有。瀏覽器端可以用強制重新整理解決;CDN 的副本會自行過期,或可以手動清除。建置工具會替變動的檔案取新名稱,大幅避免這個問題。
小型網站需要 CDN 嗎?
很多時候你其實已經有了,因為許多託管平台會自動在網站前面放一層 CDN。如果你的平台沒有,而且訪客分布在不同國家,加上 CDN 通常值得。
CDN 可以快取我的應用程式資料和登入後的頁面嗎?
CDN 可以快取任何被允許快取的內容,因此必須小心設定。圖片、腳本和樣式等公開檔案最適合快取。個人或登入後的內容通常不應該放在共用的 CDN 中,否則一位使用者可能看到另一位使用者的資料。