1、什麼是etag?
實體標籤(entitytag)是唯一標識了乙個元件的乙個特定版本的字串,是web伺服器用於確認快取元件的有效性的一種機制,通常可以使用元件的某些屬性來構造它。(總結:
實體標籤是web伺服器和瀏覽器用於確認快取元件的有效性的一種機制。)
條件get請求
那麼伺服器是根據什麼判斷快取是否還有效呢?答案有兩種方式,一種是前面提到的etag,另一種是根據最新修改時間。先來看看最新修改時間。
(1)最新修改時間
原始伺服器通過last-modified響應頭來返回元件的最新修改時間。
當需要再次訪問相同元件的時候,同時快取已經過期,瀏覽器會傳送如下條件get請求:
實體標籤
etag提供了另外一種方式,用於檢測瀏覽器快取中的元件與原始伺服器上的元件是否匹配。摘抄自書上的例子:
不帶快取的請求:
再次請求相同元件:
當etag和modified-time都出現了,則原始伺服器禁止返回304除非請求中的條件頭欄位全部一致。
2、為什麼要引入etag?
etag主要是為了解決last-modified無法解決的一些問題:
1. 一些檔案也許會週期性的更改,但是他的內容並不改變(僅僅改變的修改時間),這個時候我們並不希望客戶端認為這個檔案被修改了,而重新get;2. 某些檔案修改非常頻繁,比如在秒以下的時間內進行修改,(比方說1s內修改了n次),if-modified-since能檢查到的粒度是s級的,這種修改無法判斷(或者說unix記錄mtime只能精確到秒);
3. 某些伺服器不能精確的得到檔案的最後修改時間。
3、etag帶來的問題
etag的問題在於通常使用某些屬性來構造它,有些屬性對於特定的部署了**的伺服器來說是唯一的。當使用集群伺服器的時候,瀏覽器從一台伺服器上獲取了原始元件,之後又向另外一台不同的伺服器發起條件get請求,etag就會出現不匹配的狀況。
最佳實踐
1. 如果使用last-modified不會出現任何問題,可以直接移除etag,google的搜尋首頁則沒有使用etag。2. 確定要使用etag,在配置etag的值的時候,移除可能影響到元件集群伺服器驗證的屬性,例如只包含元件大小和時間戳。
前端效能優化 配置ETag
實體標籤 entitytag 是唯一標識了乙個元件的乙個特定版本的字串,是web伺服器用於確認快取元件的有效性的一種機制,通常可以使用元件的某些屬性來構造它。那麼伺服器是根據什麼判斷快取是否還有效呢?答案有兩種方式,一種是前面提到的etag,另一種是根據最新修改時間。先來看看最新修改時間。原始伺服器...
前端效能優化 配置ETag
實體標籤 entitytag 是唯一標識了乙個元件的乙個特定版本的字串,是web伺服器用於確認快取元件的有效性的一種機制,通常可以使用元件的某些屬性來構造它。那麼伺服器是根據什麼判斷快取是否還有效呢?答案有兩種方式,一種是前面提到的etag,另一種是根據最新修改時間。先來看看最新修改時間。原始伺服器...
前端效能優化之CSS詳細解讀
外部的css檔案中使用 import會使得頁面在載入時增加額外的延遲。什麼是alphaimageloader?ie獨有屬性,用於修正7.0以下版本中顯示png的半透明效果。解決方案 1 png8格式來代替,這種格式能在ie中很好地工作。2 確實需要使用alphaimageloader,使用下劃線 f...