什麼是」etag」?
http 協議規格說明定義etag為「被請求變數的實體值」 . 另一種說法是,etag是乙個可以與web資源關聯的記號(token)。典型的web資源可以乙個web頁,但也可能是json或xml文件。伺服器單獨負責判斷記號是什麼及其含義,並在http響應頭中將其傳送到客戶端,以下是伺服器端返回的格式:
etag: "50b1c1d4f775c61:df3"
客戶端的查詢更新格式是這樣的:
if-none-match: w/"50b1c1d4f775c61:df3"
如果etag沒改變,則返回狀態304然後不返回,這也和last-modified一樣。
etag應用:
etag由伺服器端生成,客戶端通過if-match或者說if-none-match這個條件判斷請求來驗證資源是否修改。常見的是使用if-none-match.請求乙個檔案的流程可能如下:
====第一次請求===
1.客戶端發起 http get 請求乙個檔案;
2.伺服器處理請求,返回檔案內容和一堆header,當然包括etag(例如"2e681a-6-5d044840")(假設伺服器支援etag生成和已經開啟了etag).狀態碼200
====第二次請求===
1.客戶端發起 http get 請求乙個檔案,注意這個時候客戶端同時傳送乙個if-none-match頭,這個頭的內容就是第一次請求時伺服器返回的etag:2e681a-6-5d044840
2.伺服器判斷傳送過來的etag和計算出來的etag匹配,因此if-none-match為false,不返回200,返回304,客戶端繼續使用本地快取;
流程很簡單,問題是,如果伺服器又設定了cache-control:max-age和expires呢,怎麼辦?
答案是同時使用,也就是說在完全匹配if-modified-since和if-none-match即檢查完修改時間和etag之後,伺服器才能返回304.(不要陷入到底使用誰的問題怪圈)
為什麼使用etag請求頭?
etag 主要為了解決 last-modified 無法解決的一些問題。
1、一些檔案也許會週期性的更改,但是他的內容並不改變(僅僅改變的修改時間),這個時候我們並不希望客戶端認為這個檔案被修改了,而重新get;
2、某些檔案修改非常頻繁,比如在秒以下的時間內進行修改,(比方說1s內修改了n次),if-modified-since能檢查到的粒度是s級的,這種修改無法判斷(或者說unix記錄mtime只能精確到秒)
3、某些伺服器不能精確的得到檔案的最後修改時間;
為此,http/1.1引入了 etag(entity tags).etag僅僅是乙個和檔案相關的標記,可以是乙個版本標記,比如說v1.0.0或者說"2e681a-6-5d044840"這麼一串看起來很神秘的編碼。但是http/1.1標準並沒有規定etag的內容是什麼或者說要怎麼實現,唯一規定的是etag需要放在""內。
last-modified和etags結合使用:
把last-modified 和etags請求的http請求頭一起使用,這樣可利用客戶端(例如瀏覽器)的快取。因為伺服器首先產生 last-modified/etag標記,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該記號傳回伺服器要求伺服器驗證其(客戶端)快取。
過程如下:
1. 客戶端請求乙個頁面(a)。
2. 伺服器返回頁面a,並在給a加上乙個last-modified/etag。
3. 客戶端展現該頁面,並將頁面連同last-modified/etag一起快取。
4. 客戶再次請求頁面a,並將上次請求時伺服器返回的last-modified/etag一起傳遞給伺服器。
5. 伺服器檢查該last-modified或etag,並判斷出該頁面自上次客戶端請求之後還未被修改,直接返回響應304和乙個空的響應體。
利用ETag快取優化請求
什麼是 etag http 協議規格說明定義etag為 被請求變數的實體值 另一種說法是,etag是乙個可以與web資源關聯的記號 token 典型的web資源可以乙個web頁,但也可能是json或xml文件。伺服器單獨負責判斷記號是什麼及其含義,並在http響應頭中將其傳送到客戶端,以下是伺服器端...
Etag與HTTP快取機制
etag last modified和etags如何幫助提高效能?把last modified和etags請求的http報頭一起使用,這樣可利用客戶端 例如瀏覽器 的快取。因為伺服器首先產生last modified etag標記,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該...
Etag與HTTP快取機制
etag last modified和etags如何幫助提高效能?把last modified和etags請求的http報頭一起使用,這樣可利用客戶端 例如瀏覽器 的快取。因為伺服器首先產生last modified etag標記,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該...