CDN算是個挺有意思的技術,不同于代理緩存,CDN的網關緩存和被緩存的Web站點的利益是一致的,因此,上面提到的問題對于CDN而言是沒有的。不過,即使你使用了CDN,你仍要顧慮下游的代理和瀏覽器緩存。
以上為緩存可能的“糟粕”,那他好的地方呢?緩存可以讓你的Web站點加載更快,讓你的服務器和互聯網鏈接間負擔更小。這種差異會導致一些類似質的 變化,一個網站要幾秒鐘才能加載出來,而另外一個充分發揮緩存的優勢,幾乎瞬間顯示。用戶自然更喜歡那個加載迅速的站點,訪問也更多。
再說個現實示例,許多大型互聯網公司花費了數百萬美元,在世界各地設立服務器集群來復制他們的內容,以使其盡可能快被他們的用戶訪問。緩存為你做同樣的事情,而且他們更接近最終用戶。最重要的是,你不要花銀子。實際上呢,無論你喜歡與否,代理和瀏覽器緩存都會被使用。如果你站點的緩存配置不正確,你只能聽天由命了。
Web緩存如何工作
所以的緩存都有一套自己的規則,可以用來決定何時跟緩存曖昧往來。其中部分規則設定在協議中(HTTP 1.0 以及 1.1),部分由緩存管理員⑤設置。
?、菥彺婀芾韱T:如果指的是瀏覽器緩存,則有可能就是我們服務器專家同事,在服務器上配置一些緩存規則;如果是代理緩存,則指的就是處理代理服務器這塊的管理人員。
一般而言有如下常用規則N:
響應頭明確說明,偶不想被緩存,則不會被緩存;
如果請求信息是需要認證或者安全加密的(如, HTTPS),相應內容也不會被緩存;
緩存如果有以下表現,則認為是fresh新鮮的(無需檢查源服務器,直接發送給客戶端):
含有完整的過期時間和壽命控制頭信息,并且內容仍在保鮮期內,或者
緩存最近已展現,并且在不久前修改。
則內容緩存直取,繞過源服務器。
若內容陳舊,則會要求源服務器做驗證 validate ,或者告訴緩存其拷貝副本是否是OK的。
特定情況下——例如,斷網了,之前有過的響應緩存直取而不檢查源服務器。
響應如果沒有類似ETag或Last-Modified頭這樣的校驗器,也沒有明確的更新信息,通常(并不絕對)認為是不可緩存的。
總而言之,新鮮度freshness和校驗validation是確定緩存內容是否可用的最重要途徑。如果要展示的足夠新,直接緩存取;如果檢測發現展示內容并未變化,則不會再來一次完整的傳輸。
如何控制緩存和不緩存
有很多工具可以幫助設計師和網站管理員調整服務器緩存網站的方式,這也許需要你親自動手對服務器的配置進行一些調整,但絕對值得。了解如何使用這些工具請參考本文后面的章節。
HTML Meta標簽 vs. HTTP頭信息
HTML重構人員可以在文檔的中添加標簽進行描述。這些meta標簽通常用來標記不可緩存或過期時間。
Meta標簽使用簡單,但效果一般。因為只被少數幾個瀏覽器寵幸,而代理緩存基本上就不訪問HTML文檔。盡管我們可以在頁面上試圖添加no-cache meta標簽讓頁面一直是最新的,但其實沒必要。
如果你的網站托管在ISP或者主機托管商那里,并且他們沒有賦予您任意設置HTTP頭信息的能力(比如Expires和Cache-Control),你要投訴爭取,因為在你的工作中這些是必須的。
另外一方面: HTTP頭信息可以讓你對瀏覽器和代理服務器如何處理你的副本進行更多的控制。他們在HTML代碼中是看不見的, 一般由Web服務器自動生成。但是,根據你使用的服務器,你可以在某種程度上進行控制。在下文中:你將看到一些有趣的HTTP頭信息,以及如何在你的站點 上應用部署這些特性。
HTTP頭信息發送在HTML代碼之前,只能被瀏覽器和一些中間緩存能看到,一個典型的HTTP 1.1協議返回的頭信息看上去像這樣:
HTTP/1.1 200 OKDate: Fri, 30 Oct 1998 13:19:41 GMTServer: Apache/1.3.3 (Unix)Cache-Control: max-age=3600, must-revalidateExpires: Fri, 30 Oct 1998 14:19:41 GMTLast-Modified: Mon, 29 Jun 1998 02:28:12 GMTETag: "3e86-410-3596fbbc"Content-Length: 1040Content-Type: text/html
頭信息空一行后是HTML代碼的輸出,關于如何設置HTTP頭信息請參考對應章節。
Pragma HTTP頭信息(以及為什么不起作用)
很多人認為在HTTP頭信息中設置了Pragma: no-cache后會讓內容無法被緩存。但事實并非如此:HTTP的規范 中,響應型頭信息沒有任何關于Pragma屬性的說明,只說明了請求頭信息(瀏覽器發送給服務器的頭信息)中的Pragma屬性。雖然有少部分緩存會買 賬,但大部分無視,使用Pragma沒作用。若要使用,試試下面的頭信息。
使用Expires HTTP頭信息控制不過期
Expires HTTP頭是控制緩存的基本手段,Expires的中文意思是“有效期”,顯然,就是告訴瀏覽器緩存的有效期。如果過期,緩存會檢查源服務器以確定文件是否改變了。Expires頭幾乎每個緩存都支持。
大部分的服務器允許你以多種方式設置Expires響應頭。通常,他們允許設置一個絕對過期時間,然后對比最后一次訪問的時候或者最后一次文檔修改的時候決定客戶端內容的獲取方式。
對于靜態圖片(如導航或按鈕的圖片)而言,Expires頭信息是相當有用的,因為圖片不怎么修改,您可以給圖片設置一個相當長的過期時間,這回讓 你的用戶感覺網站變快了。Expires對于控制有改變規律的網頁也很有用,例如:你有一個新聞聚合頁面,每天早上6點鐘準時更新,您可以設置緩存的過期 時間也是這個點,于是緩存就可以很聰明地知道什么時候該去重載新的內容,什么時候睡大覺。
Expires頭唯一的有效值是HTTP時間,其他值都會被認為是“前男友前女友”之類,不會去緩存的。注意:時間是格林威治時間(GMT),而不是本地時間。如下所示:
原文轉自:http://web.itivy.com/article-805-1.html