ETags

Etags(Entity tags)是伺服器和瀏覽器的一個功能,它用來判斷瀏覽器快取里的元素是否和原來伺服器上的一致。

Etags(Entity tags)是伺服器和瀏覽器的一個功能,它用來判斷瀏覽器快取里的元素是否和原來伺服器上的一致。ETags比last-modified date更具有彈性,它用一個獨一無二的字元串來標識一個元素的版本。
源伺服器用回響頭裡的ETag來特定一個元素的ETag:
之後,如果瀏覽器要驗證這個元素,它就會用If-None-Match頭來回傳ETag到源伺服器。如果符合的話,一個304狀態的代碼就會從源伺服器返回到瀏覽器,這樣源伺服器就節省了傳輸具體數據的開銷。
用Etags的問題就在於它會標識那個特定的伺服器,如果換了伺服器,Etags也就失去了原有的功能,但是這種現在在網路上太常見了,因為我們經常用伺服器集群。默認情況下,Apache和IIS會在Etag中內嵌數據,這樣會動態減少驗證成功的機會。
Apache1.3和2.x的ETag格式是inode-size-timestamp。雖然一個檔案可能在不同伺服器的同一個目錄,同樣的大小,安全級,時間戳等等,它的inode會隨著伺服器的不同而不同。
IIS5.0和6.0有同樣類似Etags的東西,叫時間戳:ChangeNumber(更改號),更改號是一個用來追蹤IIS配置變化的計數器,ChangeNumber在不同IIS伺服器之間是不一樣的。
它最終的問題就是,IIS和Apache產生的Etags會在不同伺服器之間無法匹配,這樣我們的瀏覽器就無法得到我們期待的304回響,而給我們 的是一個普通的200回響,和正常的數據流。如果你的網站只有一個伺服器還無所謂,如果是集群,而你用的是默認的ETag配置,你的用戶就會獲得更慢的頁 面,你的伺服器也會有更高的負載,消耗更大的頻寬資源,代理也無法高效快取你的內容,甚至即使你有一個長時間過期的頭部,也不會阻止 它重新載入內容。
如果你不想發揮Etags提供的這個彈性驗證模型的優勢,你最好關掉它。Apache中關掉它的方法是在Apache的配置檔案中寫這么一句:
FileETag none
如果是多伺服器負載均衡,可以設定為FileETag MTime Size,apache默認設定為FileETag INode MTime Size,去掉INode。

相關詞條

相關搜尋

熱門詞條

聯絡我們