使用緩存的優(yōu)點:
減少冗余數(shù)據(jù)的傳輸:傳輸重復(fù)的數(shù)據(jù)线脚;
緩解帶寬瓶頸問題:網(wǎng)絡(luò)為本地客戶端提供的帶寬要比遠(yuǎn)程服務(wù)器要寬粟瞬,因此傳輸速度更快短荐;
降低對服務(wù)器的要求:更快的響應(yīng)速度
降低距離時延:路由器時延并闲;本身時延细睡;
緩存命中,未命中帝火,再驗證:
緩存命中溜徙,未命中湃缎,再驗證
速度: 緩存命中>緩存再驗證成功>緩存未命中=緩存再驗證失敗蠢壹;
緩存再驗證命中:304 Not Modified;
緩存再驗證未命中:200 OK
服務(wù)器對象被刪除:404 Not Found
命中率: 文檔命中率(緩存命中率)嗓违,字節(jié)命中率;
區(qū)分命中和未命中:
緩存命中和服務(wù)器正常響應(yīng)都是 200 OK;
客戶端可以使用響應(yīng)的Date首部與當(dāng)前時間進行比較,如果Date首部中時間較早图贸,就可以認(rèn)為這是一條緩存蹂季;
緩存的拓?fù)浣Y(jié)構(gòu):
公有緩存;
私有緩存疏日;
私有緩存: 單個用戶專享偿洁;多個客戶端的重復(fù)請求
公有緩存(代理緩存):共享的緩存;減少冗余數(shù)據(jù)量的傳輸沟优;
私有緩存
共享緩存
代理緩存的層次的結(jié)構(gòu):
在較小的緩存中的未命中的請求會被導(dǎo)向較大的父緩存涕滋;緩存鏈過長會有性能損耗;
緩存的處理步驟:
(1)接收:緩存從網(wǎng)絡(luò)中讀取抵達(dá)的請求報文净神;
(2)解析:緩存對請求報文進行解析何吝;提取各種URL和各種首部;
(3)查詢:緩存查看是否有本地副本可用鹃唯,如果沒有爱榕,就向服務(wù)器獲取一份副本,保存在本地坡慌;
(4)新鮮度檢測:緩存查看已緩存的副本是否新鮮黔酥,如果不新鮮,就詢問服務(wù)器是否有任何更新洪橘;
(5)創(chuàng)建響應(yīng)
(6)發(fā)送
(7)日志
客戶端第一次請求
客戶端第一次請求
客戶端再次請求
客戶端再次請求
緩存過期: Expires首部和Cache-Control:max-age首部跪者;
Expires首部:HTTP/1.0+ Expires;絕對時間熄求;依賴于計算機的時鐘設(shè)置渣玲;
max-age首部:HTTP/1.1;相對時間;
兩種首部
服務(wù)器再驗證:文檔過期并不代表緩存中的文檔和服務(wù)器上的文檔在內(nèi)容上有實際的出入弟晚;只是代表需要進行再驗證的時間到了忘衍;
如果再驗證顯示文檔內(nèi)容沒有發(fā)生變化,緩存只需要獲取首部卿城,包含一個新的過期時間枚钓,并對緩存中的首部進行更新就行了;
如果再驗證顯示文檔內(nèi)容發(fā)生了變化瑟押,重新獲取緩存搀捷,存儲緩存即可;
兩種驗證過期的方式
If-Modified-Since:Last-Modified 再驗證
If-None-Match:Etag 再驗證
If-Modified-Since:Last-Modified 的缺陷:
(1)有些文檔會被周期性重寫多望,但是實際內(nèi)容是一樣的嫩舟;盡管內(nèi)容沒變氢烘,還是會導(dǎo)致Last-Modified改變;
(2)Last-Modified 的時間精度為秒家厌,對于時間精度下的修改無法起作用威始;
(3)有些服務(wù)器無法判斷Last-Modified
Etag:文檔的指紋信息,文檔的校驗和等等像街;
強弱驗證器:
強驗證器:只要內(nèi)容發(fā)生了變化,強驗證器就會發(fā)生變化晋渺;
弱驗證器(HTTP/1.1支持):如果只對少部分內(nèi)容進行修改镰绎,弱驗證器不會發(fā)生變化;
弱驗證器帶有W/
弱驗證器緩存首部
使用時機:
(1)響應(yīng)帶有Etag實體標(biāo)簽木西,客戶端就必須使用Etag實體標(biāo)簽驗證畴栖;
(2)響應(yīng)帶有Last-Modified ,客戶端可以使用If-Modified-Since驗證八千;
(3)兩者都有吗讶,就必須同時驗證,并且兩者都滿足才會返回304恋捆;
控制緩存的能力:
HTTP/1.1
no-store:禁止緩存響應(yīng)照皆;
no-cache: 可以緩存響應(yīng),但是沒有進行緩存新鮮度再驗證之前沸停,不可以把緩存提供給客戶端膜毁;