瀏覽器端的緩存能夠分爲強制緩存
和對比緩存
瀏覽器
若是是強制緩存,瀏覽器會直接讀取瀏覽器本地存儲的緩存。緩存
若是未失效,則直接使用緩存數據。服務器
若是緩存失效,則會請求服務器端,服務器端返回緩存規則和數據。code
若是是對比緩存,瀏覽器首先回去服務器端驗證該緩存是否失效。資源
若是未失效,則通知瀏覽器該資源未失效。ast
若是已失效,則返回給瀏覽器最新的數據和緩存規則。而且將緩存規則和最新的數據寫入瀏覽器本地緩存服務器端
服務器端會返回兩個字段Expires(HTTP1.0)
和Cache-Control(HTTP1.1)
兩個字段來控制強制緩存請求
因爲客戶端的時間不太可控,所以在HTTP1.1中,新增了Cache-Control
,該字段能夠直接設置資源的緩存時間max-age
。這樣一來,資源的緩存期能夠使用服務器端的時間了。數據
對比緩存存在兩套規則客戶端
第一種:ETag/If-None-Match
這套規則的優先級會高於下面介紹的第二種規則
在第一次服務器端返回一個資源時,在響應頭信息裏面會包含一個ETag
的字段,該字段有服務器端生成。
下一次瀏覽器端判斷這個資源是否是過時時,會帶上一個If-Modifed-Since
的信息,該信息就是上一次的ETag信息。用於驗證這個資源是否是過時。
若是相同,則返回304的狀態碼
若是不一樣,則返回200的狀態碼以及最新的資源
第二種:Last-Modified/If-Modified-Since
,本套規則的優先級低於第一套
在第一次返回一個資源時,響應頭信息裏面會包含一個Last-Modifed
的字段,該字段有服務器端生成,標識了該資源的上一次修改時間
瀏覽器端再次請求時,會帶上一個If-Modifed-Since
的字段,該信息就是Last-Modifed
的時間
若是資源的最後修改時間大於If-Modifed-Since
,就返回200和最新的資源
若是資源的最後修改時間小於If-Modifed-Since
,就返回304,瀏覽器繼續使用本地緩存