參考文章: 總結
瀏覽器訪問任何**前強制先訪問瀏覽器快取。
強制快取失效時,瀏覽器攜帶上次請求返回的過期時間或者上次請求返回的資料etag,服務端發現到了過期時間或者內容etag變化,就不使用瀏覽器快取,返回最新資料;如果沒有到過期時間或者內容etag沒有變化,就繼續使用瀏覽器快取。
expires是http/1.0使用,其值為伺服器返回該請求結果快取的到期時間,即再次發起該請求時,如果客戶端的時間小於expires的值時,直接使用快取結果。
由於expires校驗原理是比較客戶端和服務端的絕對時間,如果時區不同、或者一方時間不準確,用expires判斷過期不夠準確。
cache-control可填寫字段:
若同時存在cache-control和expires,只有cache-control生效
伺服器可以通過配置這個響應頭,來向瀏覽器傳送乙個資料上次被修改的時間標籤,例如:last-modified:wed, 15 jul 2020 02:54:16 gmt
在瀏覽器中,瀏覽器會在js和等檔案解析執行後直接存入記憶體快取中,那麼當重新整理頁面時只需直接從記憶體快取中讀取(from memory cache);而css檔案則會存入硬碟檔案中,所以每次渲染頁面都需要從硬碟讀取快取(from disk cache)。
強制快取優先於協商快取進行,若強制快取(expires和cache-control)生效則直接使用快取,若不生效則進行協商快取(last-modified / if-modified-since和etag / if-none-match),協商快取由伺服器決定是否使用快取,若協商快取失效,那麼代表該請求的快取失效,重新獲取請求結果,再存入瀏覽器快取中;生效則返回304,繼續使用快取,主要過程如下:
瀏覽器快取機制
最近在準備優化日誌請求時遇到了一些令人疑惑的問題,比如為什麼響應頭里出現了兩個 cache control 為什麼明明設定了 no cache 卻還是發請求,為什麼多次訪問時有時請求裡帶了 etag,有時又沒有帶?等等。後來查了一些資料以及同事親自驗證,總算對這些問題有了個清晰的理解,現在整理出來以...
瀏覽器快取機制
當我們瀏覽乙個頁面發現有異常時,通常考慮的就是書不是瀏覽器做了快取呢,按ctrl f5重新請求一次就能請求到沒有快取的頁面,這個是為什麼呢。首先,ctrl f5組合鍵重新整理頁面,那麼瀏覽器會直接向目標url傳送請求,而不再使用瀏覽器快取的資料。其次,當請求到達伺服器端依然有可能出現使用伺服器端的資...
瀏覽器快取機制
瀏覽器快取機制 瀏覽器快取機制,其實主要就是 協議定義的快取機制 如 expires cache control 等 但是也有非 協議定義的快取機制,如使用 html meta 標籤,web 開發者可以在 html 頁面的節點中加入 標籤,如下 上述 的作用是告訴瀏覽器當前頁面不被快取,每次訪問都需...