瀏覽器快取(brower caching)是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件
1、瀏覽器第一次請求時,會發出一組 http 頭,用來指導瀏覽器如何進行快取。伺服器規定乙個資源是否要進行快取,主要由響應頭中的expires/cache-control兩個欄位來控制。
(1)expires:http1.0時的規範,它的值為乙個絕對時間的gmt格式的時間字串
(2)cache-control:是http1.1時出現的header資訊,主要是利用該字段的max-age值來進行判斷,它是乙個相對時間。其它引數如下:
no-cache:不使用快取
no-store:直接禁止遊覽器快取資料
public:可以被所有的使用者快取,包括終端使用者和cdn等中間**伺服器
private:只能被終端使用者的瀏覽器快取,不允許cdn等中繼快取伺服器對其快取
(3)同時啟用的時候cache-control優先順序高
2、etag/if-none-match 和 last_modified/if-modify-since
(1)last_modified:http1.0時的規範,它是標識該資源的最後修改時間。當瀏覽器再次請求該資源時,request的請求頭中會包含if-modify-since,該值為快取之前返回的last-modify。伺服器收到if-modify-since後,根據資源的最後修改時間判斷是否命中協商快取。若命中,則瀏覽器返回304響應,並更新快取中的相應頭資訊。否則,返回最新的資源內容。
(2)etag:http1.1時的規範,當瀏覽器第一次請求乙個檔案時,伺服器會生成並返回乙個隨機令牌即etag,通常是檔案內容的雜湊值或者某個其他指紋碼。客戶端在下乙個請求中通過if-none-match欄位將etag的值傳送給伺服器:如果指紋碼仍然一致,說明資源未被修改,返回304。如果不一致,說明資源已修改,則返回最新的資源內容。
(3)http1.1中etag的出現主要是為了解決幾個last-modified比較難解決的問題,例如,一些檔案可能會週期性的更改,但是它的內容並不改變
(4)兩者是可以一起使用的,伺服器會優先驗證etag
使用者第二次請求時,瀏覽器會先獲取該資源快取的header資訊,根據expires/cache-control 字段判斷請求時間,如果下次請求時間在這個時間以前,則可以直接從快取中獲取資源,不必與伺服器進行通訊,返回的狀態碼為200。我們把這種機制稱為強快取。
如果使用者第二次請求時間超過快取有效期,瀏覽器就會傳送請求到伺服器,由伺服器來決定下一步該怎麼辦,這個過程稱為協商快取
參考下圖:
2、下一次載入時,首先比較cache-control,如果沒有超過時間,則命中強快取,不傳送請求,直接讀取本地檔案(如果不支援http1.1,則使用expires來判斷);如果時間已經過期,則傳送帶有if-none-match和if-modified-since的請求頭。
3、伺服器接受到請求之後,首先判斷etag(資源的內容標識)是否和伺服器上檔案的etag一致,如果一致,則命中協商快取,返回304;如果不一致,返回新的資源並帶上新的etag值返回200。
4、如果請求中沒有etag值,則比較傳送來的 if-modified-since 值,如果命中,則返回304,;否則,返回新的資源帶上新的last-modified的值並返回狀態碼200。
2、f5重新整理,瀏覽器會設定max-age=0,跳過強快取判斷,進行協商快取判斷;
3、ctrl+f5重新整理,跳過強快取和協商快取,直接從伺服器拉取資源。
……完
http快取 瀏覽器快取
如果以下題目都能快速回答,那此文章也就沒有必要要看啦 1.講一下http快取 強快取,協商快取 2.如何控制強 協商快取 expires,cache control,etag if none match,if modified sine last modified 3.cache control有哪...
瀏覽器快取
1.為什麼使用瀏覽器快取 以前了解的動態指令碼加速,或者動態內容快取之類,他們的原理都是避免伺服器重複計算,結果仍保留在伺服器端,這樣獲取資料還得從伺服器檢索然後傳送到使用者瀏覽器,如果我們把這些結果放在瀏覽器中,就省去了伺服器的查詢和網路傳輸,瀏覽器快取很好的實現了這個功能 2.瀏覽器快取存放在哪...
瀏覽器快取
瀏覽器快取知識歸納 瀏覽器快取是提公升網頁效能的一大利器,但是,也是一把雙刃劍。利用的好網頁的效能會有大幅度提公升,伺服器的壓力也會減小。利用的不好,也會遇到很多的問題。本文結合瀏覽器快取的知識,結合真實案例進行分析,希望對讀者有所幫助。瀏覽器快取分類 瀏覽器快取分為強快取和協商快取,瀏覽器載入乙個...