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 主要為了解決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中的快取機制
網頁的快取是由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常用指令
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與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標記,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該...
Etag與HTTP快取機制
把last modified和etags請求的http報頭一起使用,這樣可利用客戶端 例如瀏覽器 的快取。因為伺服器首先產生last modified etag標記,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該記號傳回伺服器要求伺服器驗證其 客戶端 快取。過程如下 1.客戶端...