瀏覽器快取是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件
瀏覽器快取主要指http的快取–即協議層,協議層快取可以被分為強制快取和協商快取。
兩種情況,一種是需要傳送http請求,一種是不需要傳送。
協議中可以造成強制快取的字段有:
http1.0 expires:到期時間,【絕對時間】—伺服器時間+快取有效時間缺點:如果客戶端修改了本地時間或本地時間和伺服器時間不一致
http1.1 cache-control:最大有效時間,【相對時間】自從http1.1開始,expires逐漸被cache-control取代,同時存在會先取cache-control。使用相對時間的話,即使本地時間與伺服器時間不一致,也不會導致快取失效。
下面列舉一下cache-control的字段可以帶的值:
當然,還存在一種情況,當資源快取時間超時了,也就是強快取失效了,接下來怎麼辦?沒錯,這樣就進入到第二級屏障——協商快取了。
強快取失效後,進入協商快取,瀏覽器快取中獲取對應的資料標識tag,然後向伺服器傳送請求,確認資料是否更新,如果更新,則返回新資料和新快取;反之,則返回304狀態碼,告知客戶端快取未更新,可繼續使用。
協議中可以造成協商快取的字段有:
last-modified:伺服器告訴客戶端,資源最後一次修改的時間。if-modified-since:再次請求時,請求頭中帶有該欄位,伺服器會將if-modified-since的值與last-modified字段值進行對比,
如果相等,則表示未修改,響應304狀態碼,告訴客戶端可繼續使用快取;反之,則表示修改了,響應200狀態碼,返回資料。
缺陷:
etag:該欄位儲存的是檔案的特殊標識(一般都是hash生成的),伺服器儲存著檔案的etag欄位,可以在與每次客戶端傳送if-no-match的字段進行比較。如果相等,則表示未修改,響應304;反之,則表示已修改,響應200狀態碼,返回資料。
在精準度上,etag優於last-modified。優於 etag 是按照內容給資源上標識,因此能準確感知資源的變化。而 last-modified 就不一樣了,它在一些特殊的情況並不能準確感知資源變化,主要有兩種情況:
編輯了資源檔案,但是檔案內容並沒有更改,這樣也會造成快取失效。
last-modified 能夠感知的單位時間是秒,如果檔案在 1 秒內改變了多次,那麼這時候的 last-modified 並沒有體現出修改了。
在效能上,last-modified優於etag,也很簡單理解,last-modified僅僅只是記錄乙個時間點,而 etag需要根據檔案的具體內容生成雜湊值。
另外,如果兩種方式都支援的話,伺服器會優先考慮etag。
補充:一些瀏覽器行為會造成什麼樣的結果?
首先通過 cache-control 驗證強快取是否可用
如果強快取可用,直接使用
否則進入協商快取,即傳送 http 請求,伺服器通過請求頭中的if-modified-since或者if-none-match欄位檢查資源是否更新
若資源更新,返回資源和200狀態碼
否則,返回304,告訴瀏覽器直接從快取獲取資源
強制快取和協商快取
二 http cache 三 強快取 四 協商快取 五 訪問重新整理分析 六 總結 快取的優點 快取的缺點 快取型別 就瀏覽器而言,一般快取我們分為四類,按瀏覽器讀取優先順序順序依次為 memory cache service worker cache http cache push cache。而...
強制快取和協商快取
瀏覽器快取 瀏覽器快取是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件。所以根據上面的特點,瀏覽器快取有下面的優點 一 強制快取 強制快取整體流程比較簡單,就是在第一次訪問伺服器取到資料之後,在過期時間之內不會再去重複請求。實現這個流...
瀏覽器的 強制快取 協商快取
強制快取 1 expires http 1.0 中可以使用響應頭部字段 expires 來設定快取時間,它對應乙個未來的時間戳。客戶端第一次請求時,服務端會在響應頭部新增 expires 字段。當瀏覽器再次傳送請求時,先會對比當前時間和 expires 對應的時間,如果當前時間早於 expires ...