NSURLCache 會(huì)將數(shù)據(jù)緩存到沙盒路徑下的Library/Caches 中矮嫉,通過(guò)請(qǐng)求的url+參數(shù)來(lái)作為key儲(chǔ)存的
Http 緩存流程
緩存是否過(guò)期 根據(jù)服務(wù)器端返回的 max-age判斷的物赶, 影響的是下一次網(wǎng)絡(luò)請(qǐng)求
處理http cache的優(yōu)先級(jí):
先判斷資源是否命中強(qiáng)緩存寇漫,命中則直接從disk里拿到資源郊艘;
如果沒(méi)有命中強(qiáng)緩存斋竞,判斷是否命中協(xié)商緩存益眉,命中則走協(xié)商緩存舅列;
如果命中了協(xié)商緩存,會(huì)發(fā)起請(qǐng)求声滥,服務(wù)端根據(jù)Request Header里的If-None-Match(對(duì)應(yīng)Etag)和If-Modified-Since(對(duì)應(yīng)Last-Modified)判斷資源是否過(guò)期,沒(méi)過(guò)期則返回304狀態(tài)碼,瀏覽器依舊用disk里的資源落塑。如果資源過(guò)期纽疟,則服務(wù)端會(huì)返回新的資源;
如果也沒(méi)有命中協(xié)商緩存憾赁,則這個(gè)請(qǐng)求不走緩存策略污朽,發(fā)起真實(shí)的請(qǐng)求,從服務(wù)端拿資源
Cache-Control在請(qǐng)求頭和響應(yīng)頭里的區(qū)別
請(qǐng)求頭里的Cache-Control影響的是當(dāng)前這一次請(qǐng)求
響應(yīng)頭里的Cache-Control是告訴瀏覽器這樣存儲(chǔ)龙考,下次依照這樣來(lái)蟆肆。影響的是下一次請(qǐng)求
Cache-Control:max-age=0 這個(gè)值表示,這個(gè)請(qǐng)求按照協(xié)商緩存的規(guī)則走晦款,一定會(huì)發(fā)出真實(shí)的請(qǐng)求炎功。這里和響應(yīng)頭里的max-age=0有不同
Cache-Control:no-cache 表示這次或下次請(qǐng)求不會(huì)讀緩存資源,即便緩存沒(méi)有過(guò)期缓溅,或者資源并沒(méi)有修改
緩存:控制客戶端訪問(wèn)數(shù)據(jù)方式
服務(wù)器設(shè)置Cache-Control:max-age=5000 控制客戶端請(qǐng)求數(shù)據(jù)從獲取緩存取還是服務(wù)器數(shù)據(jù)庫(kù)取