緩存類型:(私有緩存與共享(代理)緩存)
- 瀏覽器緩存:私有緩存
localStorage例驹;
sessionStorage赶么;
cookies瘟仿;
indexedDB;
WebSQL研铆;
http緩存埋同;
DNS緩存:域名解析返回了正確的IP,系統(tǒng)會臨時把這個返回結(jié)果存儲起來棵红; - 服務(wù)器緩存:
CDN緩存凶赁;
反向代理緩存;
負載均衡器逆甜;
網(wǎng)關(guān)緩存虱肄; - 數(shù)據(jù)庫緩存:
在業(yè)務(wù)服務(wù)器和數(shù)據(jù)庫之間增加緩存服務(wù)器redis;
數(shù)據(jù)庫把數(shù)據(jù)臨時存儲在數(shù)據(jù)庫的一個位置交煞,再次發(fā)起相同請求時直接返回對應(yīng)數(shù)據(jù)咏窿,不用對數(shù)據(jù)庫進行重新查詢;
緩存目的:
緩解服務(wù)器端壓力素征,提升效率集嵌;減少等待時間萝挤,節(jié)約帶寬;
HTTP緩存:
http緩存只能存儲GET響應(yīng)
HTTP/1.1緩存控制: - Cache-Control:請求頭和響應(yīng)頭都支持這個屬性
no-store:沒有緩存根欧,緩存中不得存儲任何關(guān)于客戶端請求和服務(wù)器端響應(yīng)的內(nèi)容怜珍;
no-cache:緩存但重新驗證,客戶端發(fā)出請求凤粗,緩存將帶有驗證的請求發(fā)送給服務(wù)器端酥泛,服務(wù)器端驗證請求中的緩存是否過期,未過期返回304侈沪,緩存才使用本地緩存副本揭璃;
private:私有緩存,不能被中間代理亭罪,CDN緩存瘦馍;
public:公共緩存;
max-age=<seconds>:過期時間应役;
must-revalidate:驗證緩存是否過期情组; - Pragma:向后兼容基于HTTP/1.1的客戶端,響應(yīng)頭中沒有明確定義
緩存驅(qū)逐:
由于緩存只有有限的空間用于存儲資源副本箩祥,所以緩存會定期地將一些副本刪除院崇。
新鮮度:
過期時間
本地檢索到一個對應(yīng)的陳舊資源(緩存副本),緩存將請求帶有If-No-Match頭發(fā)送給服務(wù)器端袍祖,服務(wù)器端返回304底瓣,則表示緩存副本為新鮮的
服務(wù)器通過 If-None-Match 或 If-Modified-Since判斷后發(fā)現(xiàn)已過期,那么會帶有該資源的實體內(nèi)容返回
改進資源
緩存驗證:
用戶點擊刷新按鈕會開始緩存驗證蕉陋;
緩存的響應(yīng)頭帶有Cache-control: must-revalidate捐凭;
瀏覽器偏好設(shè)置里設(shè)置Advanced->Cache為強制驗證緩存。
當(dāng)緩存的文檔過期之后凳鬓,需要進行緩存驗證或者重新獲取資源茁肠,服務(wù)器端返回校驗器才開始驗證。
ETags:強校驗器
Etag的值對中間代理User Agent是不透明的一個值缩举,如果響應(yīng)頭中帶有Etag垦梆,請求時可以帶上If-None-Match來驗證緩存
Last-Modified:弱校驗器(只精確到秒)
如果響應(yīng)頭中帶有Last-Modified,請求時可以帶上If-Modified-Since來驗證緩存
當(dāng)向服務(wù)端發(fā)起緩存校驗時仅孩,服務(wù)端會返回http狀態(tài)碼托猩,200 ok表示正常的結(jié)果或者304 not modified表示可以從本地緩存文件獲取資源,304的響應(yīng)頭同時也可以更新緩存文檔的過期時間辽慕。
Vary響應(yīng):
當(dāng)緩存服務(wù)器收到一個請求站刑,只有當(dāng)前的請求和原始(緩存)的請求頭跟緩存的響應(yīng)頭里的Vary都匹配,才能使用緩存的響應(yīng)鼻百。