瀏覽器Etag的原理

2021-09-19 07:18:03 字數 2850 閱讀 4854

把last-modified和etags請求的http報頭一起使用,這樣可利用客戶端(例如瀏覽器)的快取。因為伺服器首先產生last-modified/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需要放在" "內。

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.

網頁的快取是由http訊息頭中的「cache-control」來控制的,常見的取值有private、no-cache、max-age、must- revalidate等,預設為private。其作用根據不同的重新瀏覽方式分為以下幾種情況:

(1) 開啟新視窗

值為private、no-cache、must-revalidate,那麼開啟新視窗訪問時都會重新訪問伺服器。

而如果指定了max-age值,那麼在此值內的時間裡就不會重新訪問伺服器,例如:

cache-control: max-age=5(表示當訪問此網頁後的5 秒 內再次訪問不會去請求伺服器)

(2) 在位址列回車

值為private或must-revalidate則只有第一次訪問時會訪問伺服器,以後就不再訪問。

值為no-cache,那麼每次都會訪問。

值為max-age,則在過期之前不會重複訪問。

3) 按後退按扭

值為private、must-revalidate、max-age,則不會重訪問,

值為no-cache,則每次都重複訪問

(4) 按重新整理按扭

無論為何值,都會重複訪問cache-control值為「no-cache」時,訪問此頁面不會在internet臨時文章夾留下頁面備份。

header分為三部分:

第一部分為http協議的版本(http-version);

第二部分為狀態**(status);

第三部分為原因短語(reason-phrase)。 

// fix 404 pages: 用這個header指令來解決url重寫產生的404 header 

// set 404 header: 頁面沒找到

//頁面被永久刪除,可以告訴搜尋引擎更新它們的urls

// 訪問受限

// 伺服器錯誤

禁止頁面在ie中快取 

http響應訊息頭部設定:

cachecontrol = no-cache

pragma=no-cache

expires = -1 

expires 表示存在時間,允許客戶端在這個時間之前不去檢查(發請求),等同max-age的 

效果。但是如果同時存在,則被cache-control的max-age覆蓋。 

http響應優化

1.去掉date, expires

2.只保留cache-control來控制本地快取

原文: 

瀏覽器中的ETag標識

etag 1 是url的entity tag,用於標示url物件是否改變,區分不同語言和session等等。具體內部含義是使伺服器控制的,就像cookie那樣。效能 聰明的伺服器開發者會把etags和get請求的 if none match 頭一起使用,這樣可利用客戶端 例如瀏覽器 的快取。因為伺服...

瀏覽器原理

網上找了些資料,記錄下部落格連線 how browsers work behind the scenes of modern web browsers 瀏覽器執行機制 回流 重繪 關鍵渲染路徑 學習筆記。請參看分享的文章先。瀏覽器資訊部分 記錄點 1主流瀏覽器有五個 internet explore...

瀏覽器渲染原理

最近在開發b s 框架的專案。開發都是web頁面,也就是執行在瀏覽器上的使用者操作頁面。瀏覽器是使用者得到服務最直接的地方,後台做的好,前台也要讓使用者用著方便。這裡就研究一下瀏覽器的一些原理是如何提高使用者體驗的。首先,這裡有乙個新詞,渲染。什麼是網頁渲染呢?網頁渲染就是html 根據css定義的...