把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定義的...