瀏覽器查詢快取的順序
service worker
memory cache(tab頁關閉,即失效,主要針對,樣式等資源)
disk cache
push cache(http2獨有)
針對靜態檔案,動態檔案需要 web server解析
瀏覽器快取有強快取,協商快取和啟發式快取三種。
請求的基本過程,瀏覽器會先檢查cache-control和expires,看資源是否快取過期,不過期,直接使用本地快取,不發請求
過期,則向伺服器傳送請求,伺服器比對if-none-match和etag,或者if-modified-since和last-modified欄位,
看資源是否發生改變,如果未改變,則返回304,body為空,否則返回200,body為檔案內容。
1.強快取
cache-control和expires設定的快取時間,第一次請求後,檔案被快取在本地
其中cache-control優先順序高於expires
cache-control的各種值的含義:
max-age: 快取時間,瀏覽器,**伺服器均有效
s-max-age: 快取時間,**伺服器有效,且優先順序高於max-age,瀏覽器無效
no-cache: 表示快取時間為0,每次請求使用協商快取
no-store: 不快取
public: 瀏覽器和**伺服器都可以快取
private: 只有瀏覽器可以快取
max-stale: 能容忍的最大過期時間
min-fresh: 能夠容忍的最小新鮮度
2.協商快取
http請求的response header中有 last-modified和etag
瀏覽器再次請求該資源時候,會在 request header中攜帶
if-none-match(等於上次etag的值)
if-modifed-since(等於上次last-modified的值)
想服務傳送請求,伺服器對比if-none-match和etag,if-modified-since和last-modified的值,
如果一致,則返回304狀態碼,body為空。
不一致,則返回200狀態碼,body為檔案內容。
其中etag的優先順序高於last-modified
返回狀態碼 304 not modified
3.啟發式快取
如果沒有cache-control和expires的快取設定,瀏覽器依然會有乙個本地快取策略,就是啟發式快取。
其計算方法如下:
http response header中的 date(當前時間) 和 last-modified 的值
本地快取時間 = (date - last-modified) * 10%
因此,啟發式快取的快取時間可長可短,建議明確設定快取時間
返回狀態碼 200 ok (與正常的無快取請求一致,實際上使用了本地快取,沒有傳送請求)
chrome的request headers中會顯示一行字
provisional(臨時的) header are shown, 表明此請求為啟發式快取的請求。
字段解釋
last-modified:檔案上次的修改時間
etag:檔案的唯一標識,類似於hash值
etag解決了last-modified的哪些問題
1. last-modified的時間精確到秒級,當乙個檔案在1s內被多次修改,無法記錄
2. 某些檔案會被週期性修改,但內容不變,此時不想利用last-modified的值更新快取
3. 某些伺服器不能精確得到檔案的最後修改時
if-modified-since -> last-modified 時間上對比,一致則返回304
if-none-match -> etag 內容上對比,一致則返回304
在第一次請求url的時候,伺服器講 last-modified和etag返回給客戶端
在第二次請求此url的時候,客戶端將 if-modified-since 和 if-none-match 傳送到伺服器
伺服器將 if-modified-since 與 last-modified,if-none-match 與 etag做對比,一致則
返回304,否則返回200.
expires
pragma和cahce-control
http1.0的pragma和http1.1的cache-control可以用來控制頁面快取。
pragma->no-cache, expires->0 ,cache-control->no-cahce可以讓頁面不快取。
cache-control的max-age可以設定頁面在客戶端快取多少秒,是相對時間,並且覆蓋expires
age:**服務的快取時間(單位秒)
date:響應生成的時間
vary:vary:accept-encoding,user-agent告訴**服務,要快取資源的壓縮和未壓縮兩個版本
cache-contorl和pragma的no-cache設定,並不能完全禁用快取
此設定只有部分瀏覽器支援,並且**伺服器由於不解析html文件,完全不支援此方式
使用者行為與快取的關係
1. 使用者在 位址列回車,頁面鏈結跳轉,新開視窗,前進,後退時,強快取和協商快取均有效
2. 使用者在 f5重新整理頁面,強快取無效,協商快取有效
3. 使用者在 ctrl+f5重新整理頁面,強快取和協商快取均無效
分布式系統的快取
分布式系統的多台機器間的last-modified必須保持一致,而且盡量關閉etag,
因為每台機器的etag都會不一致
伺服器快取
伺服器快取屬於共享快取
包括1. **伺服器快取
2. 源伺服器快取
3. cdn快取
快取 瀏覽器快取
瀏覽器快取 brower caching 是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件 1 瀏覽器第一次請求時,會發出一組 http 頭,用來指導瀏覽器如何進行快取。伺服器規定乙個資源是否要進行快取,主要由響應頭中的expires...
瀏覽器快取
1.為什麼使用瀏覽器快取 以前了解的動態指令碼加速,或者動態內容快取之類,他們的原理都是避免伺服器重複計算,結果仍保留在伺服器端,這樣獲取資料還得從伺服器檢索然後傳送到使用者瀏覽器,如果我們把這些結果放在瀏覽器中,就省去了伺服器的查詢和網路傳輸,瀏覽器快取很好的實現了這個功能 2.瀏覽器快取存放在哪...
瀏覽器快取
瀏覽器快取知識歸納 瀏覽器快取是提公升網頁效能的一大利器,但是,也是一把雙刃劍。利用的好網頁的效能會有大幅度提公升,伺服器的壓力也會減小。利用的不好,也會遇到很多的問題。本文結合瀏覽器快取的知識,結合真實案例進行分析,希望對讀者有所幫助。瀏覽器快取分類 瀏覽器快取分為強快取和協商快取,瀏覽器載入乙個...