(1)瀏覽器快取:強快取和協商快取
強快取:catch-control htpp1.1
public可以被客戶端和**伺服器快取
private 只可以被客戶端快取
no-cache不能快取
max-age快取的生存週期
expire http1.0的產物 作為相容的手段
兩者同時存在的話,cache-control優先於expire
強快取的特點是不發請求直接從本地都快取
協商快取:就是強快取失效後,瀏覽器會攜帶標識向伺服器發起請求,有伺服器根據快取標識決定是否使用快取的過程
協商快取生效會返回304
協商快取失效會返回200和請求結果
last-modified和if-modified-since
瀏覽器向伺服器發請求的時候,伺服器會返回last-modified的header,值為伺服器檔案更新的時間,瀏覽器接收後快取檔案和header;瀏覽器下一次請求這個資源的時候會檢測有last-modified這個header,於是新增if-modifined-since這個header,值為last-modified中的值,伺服器再次受到請求後會根據if-modifed-since中的值與伺服器中的資源最後修改時間對比,如果沒有變化則返回304和空的響應體,直接從快取取,如果if-modified-since的時候小於伺服器中這個資源的最後修改時間,說明檔案有更新,於是返回新的資源檔案和200的狀態碼;
但是last-modefied存在一些弊端,如果本地開啟快取檔案,即使沒有修改內容但是還會造成last-modefied被修改,伺服器不能命中快取導致傳送相同的資源;因為根據檔案的修改時間來決定是否快取尚有不足,則可以根據檔案內容是否修改來決定快取,所以出現了etag和if-none-match;
etag是伺服器響應請求時,返回當前資源檔案的乙個唯一標識,只要資源有變化,etag就會重新生成;瀏覽器在下一次請求時將etag放入if-none-match裡,伺服器只要比較客戶端傳來的if-none-match跟自己的伺服器etag是否相同,一致則直接返回304告知客戶端使用快取;不一致則返回200和新的資源檔案;
但是etag會優先於last-modefied;
快取機制:
強快取優先於協商快取,如果cache-control和expire生效則使用快取,不生效則使用協商快取last-modifined/if-modifined-since和etag/if-none-match,協商快取由伺服器決定是否快取,若協商快取失效,則返回200和返回新的資源檔案和快取標識,再次存入瀏覽器的快取;生效則返回304,繼續使用快取;
瀏覽器快取機制
最近在準備優化日誌請求時遇到了一些令人疑惑的問題,比如為什麼響應頭里出現了兩個 cache control 為什麼明明設定了 no cache 卻還是發請求,為什麼多次訪問時有時請求裡帶了 etag,有時又沒有帶?等等。後來查了一些資料以及同事親自驗證,總算對這些問題有了個清晰的理解,現在整理出來以...
瀏覽器快取機制
當我們瀏覽乙個頁面發現有異常時,通常考慮的就是書不是瀏覽器做了快取呢,按ctrl f5重新請求一次就能請求到沒有快取的頁面,這個是為什麼呢。首先,ctrl f5組合鍵重新整理頁面,那麼瀏覽器會直接向目標url傳送請求,而不再使用瀏覽器快取的資料。其次,當請求到達伺服器端依然有可能出現使用伺服器端的資...
瀏覽器快取機制
瀏覽器快取機制 瀏覽器快取機制,其實主要就是 協議定義的快取機制 如 expires cache control 等 但是也有非 協議定義的快取機制,如使用 html meta 標籤,web 開發者可以在 html 頁面的節點中加入 標籤,如下 上述 的作用是告訴瀏覽器當前頁面不被快取,每次訪問都需...