強緩存和協商緩存html
強緩存在請求一個文件前先檢查本地緩存有沒有該文件。瀏覽器
與強緩存有關的請求頭主要有兩個:緩存
Expires的值爲服務端返回的到期時間,這個時間是一個絕對的時間,若是下一次請求時,請求時間小於服務端返回的到期時間,直接使用緩存數據。服務器
Expires會有一個問題:即時間是由服務端生成的,可能會和客戶端的時間有偏差,進而致使緩存命中偏差。網絡
這個字段只適用於 HTTP 1.0,如今主流瀏覽器默認使用HTTP 1.1,故該字段不是很重要。併發
Cache-Control的值爲服務端返回的到期時間,這個時間是一個相對的時間,若是下一次請求時,請求時間小於服務端返回的到期時間,直接使用緩存數據。代理
canche-control (http1.1)的常見取值 :htm
若是本地緩存的文件存在,發送一個http協議,詢問服務器文件是否失效。blog
與協商緩存有關的請求頭主要有兩對:資源
第一次請求資源時,服務器下發Last-Modified,這個時間是一個絕對時間,表示資源最後修改的時間。
再次請求服務器時,客戶端會把Last-Modified的值賦給If-Modified-Since,併發給服務器。
服務器收到請求後發現有頭If-Modified-Since 則與被請求資源的最後修改時間進行比對。
若資源的最後修改時間大於If-Modified-Since,說明資源有被改動過,則響應整片資源內容,返回狀態碼200和新的last-modified,客戶端收到響應後更新資源和資源的last-modified並使用最新的資源;
若資源的最後修改時間小於或等於If-Modified-Since,說明資源無最新修改,則響應HTTP 304,瀏覽器繼續使用所保存的cache。
第一次請求資源時,服務器下發Etag,這個標識表示當前資源在服務器的惟一標識(生成規則由服務器決定)。
再次請求服務器時,客戶端會把Etag的值賦If-None-Match,併發給服務器。
服務器收到請求後發現有頭If-None-Match,則與被請求資源的惟一標識進行比對進行比對。
若兩者不一樣,說明資源有被改動過,則響應整片資源內容,返回狀態碼200和新的Etag,客戶端收到響應後更新資源和資源的Etag並使用最新的資源;
若兩者相同,說明資源無最新修改,則響應HTTP 304,瀏覽器繼續使用所保存的cache。