《高性能網站建設指南》閱讀筆記_規則13- 配置ETag
發布時間:2013-11-22 瀏覽:394打印字號:大中小
ETag:實體標簽,是web服務器和瀏覽器用于確認緩存組件的有效性的一種機制。是唯一標識了一個組件的一個特定版本的字符串.IIS上的ETag格式是Filetimestamp:ChangeNumber即;時間戳和跟蹤IIS配置變化的計數器組成的字符串。
工作機制:
前面提到過,檢測組件是否有效時,是通過Web服務器與客戶端緩存的組件進行匹配的。有兩種方式:
--比較最新修改日期
原始服務器通過的Last-Modified響應頭來返回組建的最新修改日期,瀏覽器通過If-Modefied-since進行比較判斷,如果匹配則返回304(not Modefied),避免了200請求
-- 比較ETag實體標簽
服務器傳遞客戶端組件一個ETag,如:
服務器發送ETag:"10c24bc-4ab-457e1c1f"
此后,如果瀏覽器驗證該組件,則會使用If-None-Match頭將ETag傳回原始服務器,如:
瀏覽器發送If-None-Match:"10c24bc-4ab-457e1c1f"
如果相同,則服務器返回304 Not Modified
如果不相同,則服務器重新向瀏覽器發送該組件。
如果一個網站有多臺服務器,那么,對于完全相同的組件,從一臺服務器到另一臺服務器,IIS產生的ETag是不會匹配的。就是說如果有10臺服務器,用戶得到正確304響應的幾率只有10%,其余的90%都會得到200響應并下載所有的數據,
需要注意的是:ETag的服務器返回(If-None-Match)比最新修改日期的返回(If-Modified-Since)具有更高的優先級。如果同時存在,則會禁止返回304 Not Modified。
建議:
ETag只用在單個服務器的網站上,在多服務器的網站上,可以修改ETag格式(如:IIS中實現從ETag中移除ChangeNumber,只留時間戳),但這樣和Last-Modified頭是等效的。所以最好將ETag完全移除,已避免組件的重復下載。
如何在IIS中移除ETag,參考:
http://support.microsoft.com/?id=922733
http://support.microsoft.com/?id=922703