本文譯自: 這裏css
本文已同步到個人博客瀏覽器
引言緩存
緩存利用得當的話,有很大益處,好比節省帶寬,下降服務器壓力等,可是不少網站沒可以很好地利用緩存,形成一些相互依賴的資源出現不一樣步的狀況。
關於緩存的處理方案主要能夠分爲如下兩種:服務器
Cache-Control: max-age=31536000
以下圖所示:網絡
在這種狀況下,一個url對應的資源應該是一直保持不變的,若是咱們想更新資源,只能經過更改url的方式來實現:框架
<script src="/script-f93bca2c.js"></script> <link rel="stylesheet" href="/styles-a837cb1e.css"> <img src="/cats-0e9a2ef4.jpg" alt="…">
能夠看到,url中帶有一串碼,該碼是與資源內容相關的,能夠是版本號,修改日期,或者文件內容的hash值。工具
大部分服務器端的框架會有一些工具來讓這件事情變得簡單,網站
但是,這種方式並不適用於一些文章或者博客之類的網站,這些網站的url不能經過版本號來管理,並且內容也是常常須要改變的。url
Cache-Control: no-cache
(譯者注:可參照304場景)spa
以下圖所示:
注意:no-cache
並非指不緩存,而是指在使用緩存以前,必須首先向服務器端確認資源是否爲最新。no-store
指不容許緩存。一樣的must-revalidate
並不是是指必須從新驗證,它的意思是,只有當本地的緩存已經超過最長緩存時間時,才須要從新驗證。
在這種場景下,能夠在響應頭中添加ETag
或者Last-Modified
。這樣,當客戶端在下次請求的時候,就會在請求頭中帶上這些信息,分別對應的是If-None-Match
和If-Modified-Since
。服務器端根據該標識判斷資源是否爲最新的,若是是,則返回304
狀態碼。
這種設置老是會須要一次網絡請求的(來驗證本地的緩存資源是否爲最新),所以相比於第一種方式,增長了網絡請求。