瀏覽器快取(brower caching)是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件。
expires的值為服務端返回的到期時間,即下一次請求時,請求時間小於服務端返回的到期時間,直接使用快取資料。不過expires 是http 1.0的東西,現在預設瀏覽器均預設使用http 1.1,所以它的作用基本忽略。另乙個問題是,到期時間是由服務端生成的,但是客戶端時間可能跟服務端時間有誤差,這就會導致快取命中的誤差。所以http 1.1 的版本,使用cache-control替代。
cache-control
cache-control 是最重要的規則。常見的取值有private、public、no-cache、max-age,no-store,預設為private。cache-control與expires可以在服務端配置同時啟用或者啟用任意乙個,同時啟用的時候cache-control優先順序高。
private: 客戶端可以快取
public: 客戶端和**伺服器都可快取(前端的同學,可以認為public和private是一樣的)
max-age=***: 快取的內容將在 *** 秒後失效
no-cache: 需要使用協商快取來驗證快取資料(後面介紹)
no-store: 所有內容都不會快取,強制快取,協商快取都不會觸發(對於前端開發來說,快取越多越好,so…基本上和它說886)
s-maxage:同 max-age,覆蓋 max-age、expires,但僅適用於共享快取,在私有快取中被忽略。
瀏覽器第一次請求資料時,伺服器會將快取標識與資料一起返回給客戶端,客戶端將二者備份至快取資料庫中。再次請求資料時,客戶端將備份的快取標識傳送給伺服器,伺服器根據快取標識進行判斷。如果返回 304 not modified,代表資源沒有發生改變可以使用快取的資料,獲取新的過期時間。反之返回 200 就相當於重新請求了一遍資源並替換舊資源。
last-modify/if-modify-since
瀏覽器第一次請求乙個資源的時候,伺服器返回的header中會加上lastmodify,last-modify是乙個時間標識表示該資源的最後修改時間。再次請求伺服器時,通過此欄位通知伺服器上次請求時,伺服器返回的資源最後修改時間。伺服器收到請求後發現有頭if-modified-since 則與被請求資源的最後修改時間進行比對。若資源的最後修改時間大於if-modified-since,說明資源又被改動過,則響應整片資源內容,返回狀態碼200;若資源的最後修改時間小於或等於ifmodified-since,說明資源無新修改,則響應http 304,告知瀏覽器繼續使用所儲存cache。
如果命中快取,則返回http304,並且不會返回資源內容,並且不會返回lastmodify。由於對比的服務端時間,所以客戶端與服務端時間差距不會導致問題。但是有時候通過最後修改時間來判斷資源是否修改還是不太準確(資源變化了最後修改時間也可以一致)。於是出現了etag/if-none-match。etag/if-none-match(優先順序高於last-modified / if-modified-since)與last-modify/if-modify-since不同的是,etag/if-none-match返回的是乙個校驗碼(etag: entity tag)。etag可以保證每乙個資源是唯一的,資源變化都會導致etag變化*。etag值的變更則說明資源狀態已經被修改。伺服器根據瀏覽器上傳送的if-none-match值來判斷是否命中快取。通俗一點講,就是第一次客戶端訪問資源的時候,服務端返回資源內容的同時返回了etag:1234,告訴客戶端:這個檔案的標籤是1234,我如果修改了我這邊的資源的話,這個標籤就會不一樣了。第二次客戶端訪問資源的時候,由於快取中已經有了etag為1234的資源,客戶端要去服務端查詢的是這個資源有木有過期呢?所以帶上了if-none-match:1234。告訴服務端:如果你那邊的資源還是1234標籤的資源,你就返回304告訴我,不需要返回資源內容了。如果不是的話,你再返回資源內容給我就行了。服務端就比較下etag來看是返回304還是200。
強制快取與協商快取
瀏覽器快取分為強快取和協商快取 強快取 瀏覽器不會像伺服器傳送任何請求,直接從瀏覽器本地快取中讀取檔案並返回status code 200 ok 200 form memory cache 不訪問伺服器,一般已經載入過該資源且快取在了瀏覽器記憶體當中,直接從記憶體中讀取快取。瀏覽器關閉後,資料將不存...
強制快取和協商快取
二 http cache 三 強快取 四 協商快取 五 訪問重新整理分析 六 總結 快取的優點 快取的缺點 快取型別 就瀏覽器而言,一般快取我們分為四類,按瀏覽器讀取優先順序順序依次為 memory cache service worker cache http cache push cache。而...
強制快取和協商快取
瀏覽器快取 瀏覽器快取是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件。所以根據上面的特點,瀏覽器快取有下面的優點 一 強制快取 強制快取整體流程比較簡單,就是在第一次訪問伺服器取到資料之後,在過期時間之內不會再去重複請求。實現這個流...