Domain-Name-System

為什麼 CDN 使用不同的域名而不是子域?

  • April 9, 2021

許多線上服務將其網路配置為使用 CDN(內容傳遞網路),通過允許從地理位置接近的位置提供內容來提高性能。我注意到,CDN 通常來自與實際服務不同的域名。

例如,訪問www.amazon.com將涉及從 media-amazon.com 提取內容。

www.facebook.com從 fbcdn.com 獲取內容,等等。

我的問題是,為什麼這些服務不為其 CDN 使用子域而不是完全不同的域名?

例如,為什麼不使用 cdn.facebook.com 而不是 fbcdn.com?我很少看到這樣做。它幾乎總是一個不同的域名,通常是添加了一些東西的基本域,或者是一個縮寫。

我唯一能想到的是,擁有不同的域名允許使用不同的 DNS 提供商來分散 DNS 負載,但情況並非總是如此。

這種做法是否有特定的技術原因?如果是這樣,那是什麼?

澄清:我不關心域名註冊的成本。我認為任何廣泛使用 CDN 的公司都可以負擔一些額外的域名。我的問題是,從技術角度來看,為什麼使用子域不如使用單獨的域。這種做法如此普遍的事實表明它有充分的理由。

雖然每個提供商都不同,並且可能有不同的原因做出相同的選擇,但這樣做的一個常見原因是因為Cookies

如果您的網站使用 cookie,並且您的 cookie 可能需要用於多個子域,那麼您最終將與每個 CDN 請求一起發送 cookie。這會導致兩個問題:

  1. 如果您有很多 cookie 和/或非常大的 cookie,您將大大擴大對 CDN 的每個請求,無緣無故地佔用寶貴的頻寬(因為 CDN 為每個人提供相同的內容)。在 Google、Facebook、Amazon 等的規模上,請求中的每個字節都很重要,因為數百萬(甚至數十億)的請求加起來很快。
  2. 如果您的 cookie 包含使用者數據,您可能不希望 CDN 能夠看到該數據。如果您的 CDN 實際上全部或部分由第三方服務提供商託管,則尤其如此。不向 CDN 發送 cookie 可以消除對使用者數據的一種可能的攻擊途徑。

另一個常見的原因是使用者生成的內容。託管在 GitHub 儲存庫中的 Gmail 附件和程式碼就是很好的例子。如果使用者生成的內容託管在子域上,它可能會保留來自 Cookie、LocalStorage 等的使用者資訊並將其發送給第三方。託管在不同的域上可以減輕這種形式的攻擊。

引用自:https://serverfault.com/questions/996404