二、http cache
三、強快取
四、協商快取
五、訪問重新整理分析
六、總結
快取的優點:
快取的缺點:
快取型別
就瀏覽器而言,一般快取我們分為四類,按瀏覽器讀取優先順序順序依次為:memory cache
、service worker cache
、http cache
、push cache
。而本篇文章主要講的就是http cache
http cache
是我們開發中接觸最多的快取,分為強快取和協商快取。
強快取:瀏覽器第一次請求時直接快取資源,快取本地,第二次檢視資源是否過期,沒過期則直接使用資源,過期則重新請求。
協商快取:瀏覽器第一次請求快取且儲存快取的標識和時間,重複請求,瀏覽器會去請求伺服器驗證資源是否更新,伺服器根據快取標識進行判斷,沒有失效則使用快取,此時返回的是 304,通知客戶端可以使用快取資料。如果失效則重新傳送資源。
一般做了強快取,只有在強快取失效了才走協商快取。
快取狀態碼
請求務器
強快取200(from memory cache)
否,直接從快取取
協商快取
304是,通過伺服器告知瀏覽器快取是否可用
強快取來說,響應header中會有兩個欄位來標明失效規則(expires/cache-control)
1.expires
expires的值為服務端返回的到期時間,即下一次請求時,請求時間小於服務端返回的到期時間,直接使用快取資料。
expires 是http 1.0的東西,現在預設瀏覽器均預設使用http 1.1,所以它的作用基本忽略。
2.cache-control
取值有private
、public
、no-cache
、max-age
,no-store
等
取值作用
private
客戶端可以快取 ,**服務不快取
public
客戶端和**伺服器都可快取
max-age=***
快取的內容將在 *** 秒後失效
no-cache
跳過設定強快取,但是不妨礙設定協商快取
no-store
不快取,這個會讓客戶端、伺服器都不快取,也就沒有所謂的強快取、協商快取了
immutable
如果請求該資源就直接讀取快取,即使使用者做了重新整理操作,也不向伺服器發請求
值有no-cache
和no-store
,表示意思同 cache-control,優先順序高於 cache-control 和 expires,即三者同時出現時,先看 pragma > cache-control> expires。
協商快取來說,響應header中會有兩個欄位來標明(last-modified / etag)
1.last-modified
last-modified的值標示這個響應資源的最後修改時間。web伺服器在響應請求時,告訴瀏覽器資源的最後修改時間。
當再次請求該資源時,請求頭中會帶有if-modified-since
字段,值是之前返回的last-modified
的值,如:if-modified-since: mon, 06 jul 2020 06:27:10 gmt
。服務端會對比該字段和資源的最後修改時間,若一致則證明沒有被修改,告知瀏覽器可直接使用快取並返回 304;若不一致則直接返回修改後的資源,並修改 last-modified 為新的值。缺點
2.etag
請求資源時,把使用者本地該資源的 etag 同時帶到服務端,服務端和最新資源做對比。
如果資源沒更改,返回304,瀏覽器讀取本地快取。
如果資源有更改,返回200,返回最新的資源。
訪問和重新整理分為以下三種情況:
1.標籤進入、輸入url回車進入
這種情況下會根據實際設計的快取策略去判斷。
這種情況下,實際是瀏覽器將cache-control
的max-age
直接設定成了0
,讓快取立即過期,直接走協商快取路線。
3.ctrl + f5 強制重新整理
強制重新整理的情況下,瀏覽器會強行設定no-cache
,強制獲取最新的資源,就連if-modified-since
等其他快取協議欄位都會被吃掉。
圖源
強制快取和協商快取
瀏覽器快取 瀏覽器快取是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件。所以根據上面的特點,瀏覽器快取有下面的優點 一 強制快取 強制快取整體流程比較簡單,就是在第一次訪問伺服器取到資料之後,在過期時間之內不會再去重複請求。實現這個流...
瀏覽器快取 強制快取和協商快取
瀏覽器快取是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件 瀏覽器快取主要指http的快取 即協議層,協議層快取可以被分為強制快取和協商快取。兩種情況,一種是需要傳送http請求,一種是不需要傳送。協議中可以造成強制快取的字段有 ht...
強快取和協商快取
對於一次已經有快取存在的請求來說 即之前已經發過針對這個資源的請求,在本地已經有快取 如果發起請求,那麼 首先會去找到快取資源的響應頭中的expires 過期時間 和cache control 控制快取的失效性 來判斷當前是否直接使用快取,如果當前時間還在expires之前,即快取仍未失效的情況下,...