<meta http-equiv="pragma" content="no-cache">
pragma與no-cache用于定義頁面緩存
<meta http-equiv="cache-control" content="no-cache">
常見的取值有private、no-cache、max-age、must-revalidate等,默認(rèn)為private
<meta http-equiv="Expires" content="0">
指定Expires值為一個(gè)早已過去的時(shí)間,那么訪問此網(wǎng)時(shí)若重復(fù)在地址欄按回車,那么每次都會重復(fù)訪問
一般是設(shè)置這幾個(gè)header:
處理流程一般如下:
cache-control:
expires:
Expires = 時(shí)間,HTTP 1.0 版本,緩存的載止時(shí)間,允許客戶端在這個(gè)時(shí)間之前不去檢查(發(fā)請求),Expires 的一個(gè)缺點(diǎn)就是,返回的到期時(shí)間是服務(wù)器端的時(shí)間,這樣存在一個(gè)問題,如果客戶端的時(shí)間與服務(wù)器的時(shí)間相差很大,那么誤差就很大,所以在HTTP 1.1版開始,使用Cache-Control: max-age=秒替代。
last-modified:
表明資源最后更新的時(shí)間,響應(yīng)格式一般為:
last-modified:Mon, 21 Nov 2016 03:25:47 GMT
當(dāng)?shù)谝淮握埱筚Y源時(shí),源服務(wù)器響應(yīng)后返回last-modified值和響應(yīng)內(nèi)容,客戶端會將響應(yīng)內(nèi)容和last-modified一起緩存在本地,第二次請求時(shí)會將請求體連同if-modified-since(等于last-modified的值)一起發(fā)送給服務(wù)端,服務(wù)端會根據(jù)if-modified-since判定資源是否改變,如果沒有改變會響應(yīng)304返回一個(gè)空的響應(yīng)體,如果資源改變返回新的內(nèi)容。
etags:
根據(jù)實(shí)體內(nèi)容生成一段hash字符串,標(biāo)識資源的狀態(tài),由服務(wù)端產(chǎn)生,資源改變這個(gè)值就會改變個(gè)人感覺類似于資源的一種抽象映射。請求過程類似于last-modified,不過它作為if-none-match(服務(wù)端響應(yīng)的etags)發(fā)送給服務(wù)端判斷這個(gè)值是否與服務(wù)端的etags一致看資源是否改變。
某些服務(wù)器不能精確得到資源的最后修改時(shí)間,這樣就無法通過最后修改時(shí)間判斷資源是否更新
如果資源修改非常頻繁,在秒以下的時(shí)間內(nèi)進(jìn)行修改,而Last-modified只能精確到秒
一些資源的最后修改時(shí)間改變了,但是內(nèi)容沒改變,使用ETag就認(rèn)為資源還是沒有修改的
last-modified和etags的處理流程如下:
cdn(Content Delivery Network),即就是內(nèi)容分發(fā)網(wǎng)絡(luò),就相當(dāng)于是在客戶端和服務(wù)端之間加一個(gè)cdn層,用戶在瀏覽網(wǎng)站的時(shí)候,cdn會選擇一個(gè)離用戶最近的cdn邊緣節(jié)點(diǎn)來響應(yīng)用戶的請求,這不但加快了用戶體驗(yàn)速度也減輕了源服務(wù)器的負(fù)載。
工作原理:用戶通過輸入域名來訪問頁面,首先進(jìn)行dns處理,dns解析服務(wù)器會將用戶訪問請求定位到離用戶最近、負(fù)載最輕的cdn緩存服務(wù)器上,返回該cdn節(jié)點(diǎn)的ip地址,緩存服務(wù)器拿到數(shù)據(jù)后,一方面將數(shù)據(jù)返回瀏覽器,另一方面進(jìn)行本地保存,之后再次訪問,數(shù)據(jù)將從cdn緩存服務(wù)器中被返回。
HTML5 引入了應(yīng)用程序緩存,這意味著 web 應(yīng)用可進(jìn)行緩存,并可在沒有因特網(wǎng)連接時(shí)進(jìn)行訪問。
應(yīng)用程序緩存為應(yīng)用帶來三個(gè)優(yōu)勢:
設(shè)置:
<html lang="en" manifest="demo.manifest">...</html>
demo.manifest是一個(gè)文件,后綴名為manifest,包含瀏覽器需要緩存的內(nèi)容。manifest屬性可以指定一個(gè)絕對URL或是一個(gè)相對路徑,但是,一個(gè)絕對URL需要和web app是同源的。一個(gè)manifest文件可以是任何擴(kuò)展文件類型,但必須有正確的mime-type,比如在Apache中添加
AddType text/cache-manifest .appcache
離線存儲的原理就是請求的資源會像cookie一樣被存儲了下來,之后當(dāng)網(wǎng)絡(luò)在處于離線狀態(tài)下時(shí),瀏覽器會通過被離線存儲的數(shù)據(jù)進(jìn)行頁面展示。
localstorage和sessionstorage,它們的作用及區(qū)別相信大家都很熟悉了,這里我再總結(jié)一下吧。
二者都是針對數(shù)據(jù)進(jìn)行本地存儲的,區(qū)別是:
感覺常見的區(qū)別就這兩個(gè)吧,它們的操作也很簡單,web storage擁有像getItem,setItem,clear等方法,不像cookie存儲還得自己去封裝一個(gè),比較方便。