實體標籤(entitytag)是唯一標識了乙個元件的乙個特定版本的字串,是web伺服器用於確認快取元件的有效性的一種機制,通常可以使用元件的某些屬性來構造它。
那麼伺服器是根據什麼判斷快取是否還有效呢?
答案有兩種方式,一種是前面提到的etag,另一種是根據最新修改時間。先來看看最新修改時間。
原始伺服器通過last-modified響應頭來返回元件的最新修改時間。
當需要再次訪問相同元件的時候,同時快取已經過期,瀏覽器會傳送如下條件get請求:
etag提供了另外一種方式,用於檢測瀏覽器快取中的元件與原始伺服器上的元件是否匹配。
摘抄自書上的例子:
1、不帶快取的請求:
2、再次請求相同元件:
當etag和modified-time都出現了,則原始伺服器禁止返回304,除非請求中的條件頭欄位全部一致。
etag主要是為了解決last-modified無法解決的一些問題:
1、一些檔案也許會週期性的更改,但是他的內容並不改變(僅僅改變的修改時間),這個時候我們並不希望客戶端認為這個檔案被修改了,而重新get;
2、 某些檔案修改非常頻繁,比如在秒以下的時間內進行修改,(比方說1s內修改了n次),if-modified-since能檢查到的粒度是s級的,這種修改無法判斷(或者說unix記錄mtime只能精確到秒);
3、某些伺服器不能精確的得到檔案的最後修改時間。
etag的問題在於通常使用某些屬性來構造它,有些屬性對於特定的部署了**的伺服器來說是唯一的。
當使用集群伺服器的時候,瀏覽器從一台伺服器上獲取了原始元件,之後又向另外一台不同的伺服器發起條件get請求,etag就會出現不匹配的狀況。
1、如果使用last-modified不會出現任何問題,可以直接移除etag,google的搜尋首頁則沒有使用etag。
2、確定要使用etag,在配置etag的值的時候,移除可能影響到元件集群伺服器驗證的屬性,例如只包含元件大小和時間戳。
前端效能優化 配置ETag
實體標籤 entitytag 是唯一標識了乙個元件的乙個特定版本的字串,是web伺服器用於確認快取元件的有效性的一種機制,通常可以使用元件的某些屬性來構造它。那麼伺服器是根據什麼判斷快取是否還有效呢?答案有兩種方式,一種是前面提到的etag,另一種是根據最新修改時間。先來看看最新修改時間。原始伺服器...
解讀前端效能優化之「配置ETag」
1 什麼是etag?實體標籤 entitytag 是唯一標識了乙個元件的乙個特定版本的字串,是web伺服器用於確認快取元件的有效性的一種機制,通常可以使用元件的某些屬性來構造它。總結 實體標籤是web伺服器和瀏覽器用於確認快取元件的有效性的一種機制。條件get請求 那麼伺服器是根據什麼判斷快取是否還...
前端效能優化
1.減少http請求次數 css sprites 在國內很多人叫css精靈,是一種網頁應用處理方式。它允許你將乙個頁面涉及到的所有零星都包含到一張大圖中去,這樣一來,當訪問該頁面時,載入的就不會像以前那樣一幅一幅地慢慢顯示出來了。對於當前網路流行的速度而言,不高於200kb的單張的所需載入時間基本是...