首先,什麼是緩存?個人理解,緩存就是一個資源副本。當咱們向服務器請求資源後,會根據狀況將資源 copy 一份副本存在本地,以方便下次讀取。它與本地存儲 localStorage 、cookie 等不一樣,本地存儲更可能是數據記錄,存儲量較小,爲了本地操做方便。而緩存更可能是爲了減小資源請求,多用於存儲文件,存儲量相對較大。瀏覽器
HTTP Cache 是咱們開發中接觸最多的緩存,它分爲強緩存和協商緩存。緩存
強緩存:直接從本地副本比對讀取,不去請求服務器,返回的狀態碼是 200。
協商緩存:會去服務器比對,若沒改變才直接讀取本地緩存,返回的狀態碼是 304。服務器
a. 減小網絡帶寬消耗cookie
b. 下降服務器壓力網絡
c. 減小網絡延遲,加快頁面打開速度blog
第一次請求(尚未緩存):資源
有緩存後的請求:開發
Expires值一般是緩存的具體失效日期(時間戳),屬於HTTP1.0協議ast
Cache-Control的值是max-age = 毫秒數, 屬於HTTP1.1協議,它的優先級要比Expires要高cache-control
當緩存未過時時,下次再訪問該文件,瀏覽器不會訪問服務器,而是直接在緩存中取。
Last-Modified是響應頭
If-Modified-Since是請求頭
F5刷新頁面的時候,瀏覽器會忽略緩存繼續向服務器發送請求。若是此時服務器上的文件沒有被修改會返回304,讓瀏覽器直接從緩存中取,減小響應開銷。
Etag是服務端給資源對應的惟一標識符,可以更加準確的控制緩存。