瀏覽器快取

2022-02-04 01:52:50 字數 3270 閱讀 1249

瀏覽器查詢快取的順序

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.瀏覽器快取存放在哪...

瀏覽器快取

瀏覽器快取知識歸納 瀏覽器快取是提公升網頁效能的一大利器,但是,也是一把雙刃劍。利用的好網頁的效能會有大幅度提公升,伺服器的壓力也會減小。利用的不好,也會遇到很多的問題。本文結合瀏覽器快取的知識,結合真實案例進行分析,希望對讀者有所幫助。瀏覽器快取分類 瀏覽器快取分為強快取和協商快取,瀏覽器載入乙個...