http面試必會的 強制快取和協商快取

2021-09-24 07:51:52 字數 2704 閱讀 2698

本文將介紹http中強制快取和協商快取的區別

1. 什麼是快取?

瀏覽器快取(brower caching)是瀏覽器對之前請求過的檔案進行快取,以便下一次訪問時重複使用,節省頻寬,提高訪問速度,降低伺服器壓力

http快取機制主要在http響應頭中設定,響應頭中相關欄位為expires、cache-control、last-modified、etag。

http 1.0協議中的。簡而言之,就是告訴瀏覽器在約定的這個時間前,可以直接從快取中獲取資源(representations),而無需跑到伺服器去獲取。

另:

2. 瀏覽器是如何判斷是否使用快取的

第一次請求:

第二次請求相同網頁:

3. 快取的類別

瀏覽器快取分為強快取和協商快取

強快取:瀏覽器不會像伺服器傳送任何請求,直接從本地快取中讀取檔案並返回status code: 200 ok

200 form memory cache : 不訪問伺服器,一般已經載入過該資源且快取在了記憶體當中,直接從記憶體中讀取快取。瀏覽器關閉後,資料將不存在(資源被釋放掉了),再次開啟相同的頁面時,不會出現from memory cache。

200 from disk cache: 不訪問伺服器,已經在之前的某個時間載入過該資源,直接從硬碟中讀取快取,關閉瀏覽器後,資料依然存在,此資源不會隨著該頁面的關閉而釋放掉下次開啟仍然會是from disk cache。

優先訪問memory cache,其次是disk cache,最後是請求網路資源

協商快取: 向伺服器傳送請求,伺服器會根據這個請求的request header的一些引數來判斷是否命中協商快取,如果命中,則返回304狀態碼並帶上新的response header通知瀏覽器從快取中讀取資源;

4. 強快取和協商快取的header引數

強快取:

expires:過期時間,如果設定了時間,則瀏覽器會在設定的時間內直接讀取快取,不再請求

cache-control:當值設為max-age=300時,則代表在這個請求正確返回時間(瀏覽器也會記錄下來)的5分鐘內再次載入資源,就會命中強快取。

cache-control:除了該字段外,還有下面幾個比較常用的設定值:

(1) max-age:用來設定資源(representations)可以被快取多長時間,單位為秒;

(2) s-maxage:和max-age是一樣的,不過它只針對**伺服器快取而言;

(3)public:指示響應可被任何快取區快取;

(4)private:只能針對個人使用者,而不能被**伺服器快取;

(5)no-cache:強制客戶端直接向伺服器傳送請求,也就是說每次請求都必須向伺服器傳送。伺服器接收到 請求,然後判斷資源是否變更,是則返回新內容,否則返回304,未變更。這個很容易讓人產生誤解,使人誤 以為是響應不被快取。實際上cache-control: no-cache是會被快取的,只不過每次在向客戶端(瀏覽器)提供響應資料時,快取都要向伺服器評估快取響應的有效性。

(6)no-store:禁止一切快取(這個才是響應不被快取的意思)。

複製**

cache-control是http1.1的頭字段,expires是http1.0的頭字段,如果expires和cache-control同時存在,cache-control會覆蓋expires,建議兩個都寫。

協商快取:

last-modifued/if-modified-since和etag/if-none-match是分別成對出現的,呈一一對應關係

etag/if-none-match:

etag:

etag是屬於http 1.1屬性,它是由伺服器(apache或者其他工具)生成返回給前端,用來幫助伺服器控制web端的快取驗證。 apache中,etag的值,預設是對檔案的索引節(inode),大小(size)和最後修改時間(mtime)進行hash後得到的。

if-none-match:

當資源過期時,瀏覽器發現響應頭里有etag,則再次像伺服器請求時帶上請求頭if-none-match(值是etag的值)。伺服器收到請求進行比對,決定返回200或304

last-modifued/if-modified-since:

last-modified:

瀏覽器向伺服器傳送資源最後的修改時間

if-modified-since:

當資源過期時(瀏覽器判斷cache-control標識的max-age過期),發現響應頭具有last-modified宣告,則再次向伺服器請求時帶上頭if-modified-since,表示請求時間。伺服器收到請求後發現有if-modified-since則與被請求資源的最後修改時間進行對比(last-modified),若最後修改時間較新(大),說明資源又被改過,則返回最新資源,http 200 ok;若最後修改時間較舊(小),說明資源無新修改,響應http 304 走快取。

強制快取和協商快取

二 http cache 三 強快取 四 協商快取 五 訪問重新整理分析 六 總結 快取的優點 快取的缺點 快取型別 就瀏覽器而言,一般快取我們分為四類,按瀏覽器讀取優先順序順序依次為 memory cache service worker cache http cache push cache。而...

強制快取和協商快取

瀏覽器快取 瀏覽器快取是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件。所以根據上面的特點,瀏覽器快取有下面的優點 一 強制快取 強制快取整體流程比較簡單,就是在第一次訪問伺服器取到資料之後,在過期時間之內不會再去重複請求。實現這個流...

Http強快取和協商快取

本文主要講解瀏覽器端的快取,快取的作用是不言而喻的,能夠極大的改善網頁效能,提高使用者體驗。快取這東西,第一次必須獲取到資源後,然後根據返回的資訊來告訴如何快取資源,可能採用的是強快取,也可能告訴客戶端瀏覽器是協商快取,這都需要根據響應的header內容來決定的。下面用兩幅圖來描述瀏覽器的快取是怎麼...