HTTP緩存
瀏覽器端的緩存可以分為強制緩存
和對比緩存
強制緩存
如果是強制緩存,瀏覽器會直接讀取瀏覽器本地存儲的緩存。
如果未失效,則直接使用緩存數據。
如果緩存失效,則會請求服務器端,服務器端返回緩存規則和數據。
對比緩存
如果是對比緩存,瀏覽器首先回去服務器端驗證該緩存是否失效。
如果未失效,則通知瀏覽器該資源未失效。
如果已失效,則返回給瀏覽器最新的數據和緩存規則。並且將緩存規則和最新的數據寫入瀏覽器本地緩存
強制緩存規則
服務器端會返回兩個字段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,瀏覽器繼續使用本地緩存
HTTP緩存