為什麼很多網站的內容儲存用別的域名?有什麼好處?

比如 Facebook 用 fbcdn.net, Twitter 用 http://twimg.com
如果是為了減少 html 代碼,那這能減多少? 而且谷歌的似乎是 http://googlecontent.com,還變長了。
如果是為了隔離內容或別的目的,有什麼好處?


三個最主流的原因:
1. CDN緩存更方便
2. 突破瀏覽器並發限制 (你隨便挑一個 G家的 url: https://lh4.googleusercontent.com/-si4dh2myPWk/T81YkSi__AI/AAAAAAAAQ5o/LlwbBRpp58Q/w497-h373/IMG_20120603_163233.jpg, 把前面的 lh4換成 lh3,lh6啥的,都照樣能夠訪問,像地圖之類的需要大量並發下載圖片的站點,這個非常重要。)
3. Cookieless, 節省帶寬,尤其是上行帶寬 一般比下行要慢。。。

還有另外兩個非常規原因:
4. 對於UGC的內容和主站隔離,防止不必要的安全問題( 上傳js竊取主站cookie之類的) 。
正是這個原因要求用戶內容的域名必須不是自己主站的子域名,而是一個完全獨立的第三方域名。

5. 數據做了劃分,甚至切到了不同的物理集群,通過子域名來分流比較省事. ^_^ 這個可能被用的不多。

PS: 關於Cookie的問題,帶寬是次要的,安全隔離才是主要的。
關於多域名,也不是越多越好,雖然伺服器端可以做泛解釋,瀏覽器做dns解釋也是耗時間的,而且太多域名,如果要走 https的話,還有要多買證書和部署的問題,^_^。


除了陳湛翀說的節約cookie帶寬的因素,另一個重要因素是節約主域名的連接數,從而提高客戶端網路帶寬的利用率,優化頁面響應。因為老的瀏覽器(IE6是典型),針對同一個域名只允許同時保持兩個HTTP連接。將圖片等資源請求分配到其他域名上,避免了大圖片之類的並不一定重要的內容阻塞住主域名上其他後續資源的連接(比如ajax請求)。


主要是節省帶寬。
問題里的「網站的內容」,其實指的是網站的圖片,或者視頻,或者js,css。

舉例說一下:
twitter 的主站 http://twitter.com ,用戶的每次訪問,都會帶上自己的cookie ,挺大的。假如twitter 的圖片放在主站域名下,那麼用戶每次訪問圖片時,request header 里就會帶有自己的cookie ,header 里的cookie 還不能壓縮,而圖片是不需要知道用戶的cookie 的,所以這部分帶寬就白白浪費了。
寫主站程序時,set-cookie 也不要set 到圖片的域名上。
在小流量的網站,這個cookie 其實節省不了多少帶寬,當流量如facebook twitter 時,節省下來就很可觀了。


靜態內容和動態內容分伺服器存放,使用不同的伺服器處理請求。處理動態內容的只處理動態內容,不處理別的,提高效率。


有人說到點上了。YSlow。。。


我遇到的一般就是
1.cookie
2.動靜分離需求 方便於CDN

3.並發/偽並發需求


1、將內容拆分有利於做專門有針對性優化的伺服器,後期維護相對方便
2、用戶請求是多域名是並行下載,速度上更快


跨域不會傳cookie,節省寬頻
不同域可以提高請求資源並發


動靜分離


部署CDN + http 並發


主要分流吧


個人認為主要是伺服器特點不一樣,存文件的注重IO方面的優化,處理數據的注重計算性能。


推薦閱讀:

TAG:域名 | 網站架構 | HTTP |