我的網站網域名稱是www.yining.org,有個頁面(比如就這篇blog entry)帶有一張圖片,其src為:/img/camel.gif,那麼它的URL就是:”http://www.yining.org/img/camel.gif”。如果這個版面設定了cookie(比如為了記錄留言者的ID和網站地址等),cookie的範圍名自動為www.yining.org,那麼每次訪問該頁的時候,因為URL的網域名稱部是www.yining.org,那麼瀏覽器都會帶著cookie對該圖片發起請求,即使一路上的web cache有www.yining.org/img/camel.gif的記錄,也依然要到我的伺服器(the origin server),而不是從中間的web cache返回 - 因為帶cookie的請求都可能根據不同cookie的值而返回不同的response。
但是這對許多靜態資源(圖片, css, 和javascript)來說不是最理想的,因為不論cookie是什麼,它們的response裡都是同樣的內容,對它們的請求沒有必要每次都回到origin server。其次,因為不同web cache對帶cookie的請求支援不同,即使有的cache能夠緩衝帶cookie的response,但是1)不是大多數的cache都能做到這點,2)大多數的cache都預設緩衝不帶cookie的response。因此最好的辦法就是使用不同的網域名稱把靜態資源隔離開。雖然cookie的path屬性也能做到這點,但是畢竟限制太多,不如使用專門的網域名稱靈活。
所以應該盡量把所有靜態對象和動態網頁面的網域名稱分開,更嚴謹地說,是把不需要讀寫用戶端cookie的伺服器資源與需要讀寫cookie的程式分開到不同的網域名稱。比如我可以設定另一個網域名稱static.yining.org,在引用該圖片的<img>裡的src屬性改為”http://static.yining.org/img/camel.gif”,那麼當訪問首頁的時候,瀏覽器就不會帶著cookie(因為作用的網域名稱現在不一樣了),這樣就能更好地利用web cache緩衝和伺服器的效能。我請教過一位曾經在NetAppliance(最大的web cache廠商)工作的同學,據他說根據經驗,帶和不帶cookie之間的差別有可能是20%甚至更大。