瀏覽器的快取分為強快取和協商快取,當客戶端請求某個資源的時候,獲取快取的流程如下
(1)先根據這個資源的http header判斷它是否命中強快取,如果命中,則直接從本地快取中獲取資源,不會則向伺服器請求 資源。
(2)當強快取沒有命中時,客戶端會傳送請求到伺服器,伺服器通過另一些request header驗證這個資源是否命中協商快取,這個過程成為http再驗證,如果命中,伺服器直接返回請求而不返回資源,而是告訴客戶端之間從快取中獲取,客戶端收到返回後就直接從客戶端獲取資源
(3)強快取和協商快取的共同之處在於:如果命中快取,伺服器不會返回資源;區別是:強快取不傳送請求打伺服器,但是協商快取會傳送請求到伺服器
在這裡插入描述
(4)當協商快取沒有命中時,伺服器會返回資源給客戶端
(5)當ctrl+f5強制重新整理網頁時,直接從伺服器載入,跳過強快取和協商快取
(6)當f5重新整理頁面時,跳過強快取但會檢查協商快取
強快取(1)expires該字段是http1.0時的規範,值是乙個絕對時間的gmt格式的時間字串,代表快取的過期時間
(2)cache-control:max-age該字段是http1.1的規範強快取利用的是max-age的值來實現快取資源的最大生命週期,單位是秒
協商快取
(1)last-modified資源最後的更新時間,隨著伺服器的response返回
(2)if-modified-since通過比較兩個時間來判斷資源在兩次請求期間是否有過修改,如果沒有就命中協商請求
(3)etag資源內容的唯一標識,隨著伺服器的response返回
(4)if-none-match伺服器通過請求頭部的if-none-match與當前資源的etag是否一致來表示資源在兩次請求中是否有過修改,如果沒有修改,則命中協商快取
第一次開啟瀏覽器訪問資源
可以看到第一次開啟瀏覽器可以看到response header中cache-control: public, max-age=7200 說明開啟了強制快取,有效期是7200秒,再看返回狀態是200並且是(from disk cache),所以可以得知強制快取還沒過期,這時是直接取的快取沒有發起伺服器請求,所以這裡獲取資源特別快,只用了16.49ms。
第二次f5重新整理頁面,可以看到response header中cache-control: public, max-age=7200 說明開啟了強制快取,有效期是7200秒,但因為不是首次訪問,所以此次走的是協議快取機制,再看header資訊中last-modified: fri, 23 oct 2020 03:00:57 gmt與if-modified-since: fri, 23 oct 2020 03:00:57 gmt一致,所以改快取未失效,仍然走快取,返回狀態是403。這次請求是先訪問了伺服器進行了快取失效驗證對比,然後去訪問的快取。所以時間=請求伺服器時間+讀取快取時間=154.2ms
這次先清除瀏覽器快取,再重新整理頁面,會看到這次返回的是200,說明是直接從伺服器拿的資源。原因是因為本地未找到快取,這是就沒辦法走協議快取,可以看到request header 中並沒有包含if-modified-since,但是reponse會返回乙個last-modified。這次請求時間是216.33ms。明顯比前兩次要久。
瀏覽器快取及優化
參考 瀏覽器快取知識小結及應用 chrome61測試 首頁doctype html html head meta charset utf 8 title 123 title script src script script src 2.js script body body html js srv....
瀏覽器快取機制 小總結
宣告 本文 載 有小調整 瀏覽器快取型別 有兩種,強快取和協商快取 1.強快取 不會向伺服器傳送請求,直接從快取中讀取資源,在chrome控制台的network選項中可以看到該請求返回200的狀態碼,並且size顯示from disk cache或from memory cache 2.協商快取 向...
快取 瀏覽器快取
瀏覽器快取 brower caching 是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件 1 瀏覽器第一次請求時,會發出一組 http 頭,用來指導瀏覽器如何進行快取。伺服器規定乙個資源是否要進行快取,主要由響應頭中的expires...