常用狀態(tài)碼
200 請(qǐng)求返回成功
301 永久重定向
302 臨時(shí)重定向
304 資源未更改(對(duì)應(yīng)筆記中客戶端緩存)
400 客戶端代碼錯(cuò)誤
401 未認(rèn)證
403 forbidden,服務(wù)端理解客戶端的請(qǐng)求索守,但拒不執(zhí)行
404 頁面刘离,資源找不到
405 請(qǐng)求方法不被允許
500 服務(wù)端不可預(yù)知的錯(cuò)誤
502 bad gateway 網(wǎng)關(guān)請(qǐng)求服務(wù)器拿到無效返回
503 系統(tǒng)當(dāng)前不可用
504 服務(wù)器超時(shí)
由304引出的客戶端緩存
HTTP1.0時(shí)使用expires來保存失效時(shí)間室叉,當(dāng)響應(yīng)頭有這個(gè)字段時(shí),瀏覽器強(qiáng)制緩存硫惕,即茧痕,下次再訪問這個(gè)文件,直接從緩存中讀取恼除,不向服務(wù)器發(fā)送請(qǐng)求
缺點(diǎn):這個(gè)時(shí)間是服務(wù)端返回的服務(wù)端時(shí)間踪旷,客戶端時(shí)間與服務(wù)端時(shí)間可能不一致
HTTP1.1時(shí)使用cache-control作為是否緩存以及緩存策略的字段
cache-control:
1. no-store 不進(jìn)行任何形式緩存
2. no-cache 不直接使用緩存,其實(shí)在瀏覽器是存儲(chǔ)了的豁辉,進(jìn)程內(nèi)存/硬盤令野,需要請(qǐng)求服務(wù)端進(jìn)行校驗(yàn)資源是否修改,未修改則返回304徽级,空body气破,使用緩存,不然餐抢,重新返回響應(yīng)體堵幽,狀態(tài)碼200 協(xié)商緩存
3. max-age 這個(gè)時(shí)間之內(nèi)都可以直接從緩存中獲取,不用重新請(qǐng)求弹澎,強(qiáng)緩存
4. private 只能客戶端緩存,不允許代理服務(wù)器進(jìn)行緩存
5. public 都可以進(jìn)行努咐,客戶端以及代理服務(wù)器苦蒿,如cdn
返回的max-age = 0與no-cache等價(jià),都是每次都去服務(wù)器校驗(yàn)更新狀態(tài)
瀏覽器請(qǐng)求過程
瀏覽器第一次訪問請(qǐng)求渗稍,服務(wù)器返回Last-Modified(服務(wù)器最后修改文件的時(shí)間)佩迟,Etags(當(dāng)前文件的版本)团滥,如果是no-cache或max-age則將響應(yīng)體和緩存標(biāo)識(shí)存入瀏覽器緩存中
第二次請(qǐng)求,max-age直接從緩存中獲取數(shù)據(jù)报强,no-cache從緩存中獲取標(biāo)識(shí)去請(qǐng)求服務(wù)端灸姊,字段為if-modified-since和if-None-Match,先校驗(yàn)if-None-Match與服務(wù)器etags秉溉,再校驗(yàn)if-modified-since力惯,如果沒有更改,則返回標(biāo)識(shí)和空的響應(yīng)體召嘶,狀態(tài)碼304父晶,資源未改變,不然返回200及新的緩存標(biāo)識(shí)和響應(yīng)數(shù)據(jù)
使用if-modified-since缺點(diǎn)
1. 如果資源修改時(shí)間更新了弄跌,但是內(nèi)容沒有修改甲喝,那么達(dá)不到緩存的目的
2. 如果資源在毫秒之間更改,但是緩存的last-modified時(shí)間保存的是秒铛只,這時(shí)候是不應(yīng)該使用緩存的
強(qiáng)緩存:減少請(qǐng)求埠胖,就減少了帶寬時(shí)間,強(qiáng)緩存未失效的話返回狀態(tài)碼永遠(yuǎn)是200
協(xié)商緩存:請(qǐng)求數(shù)不變淳玩,但是304狀態(tài)只會(huì)返回空的響應(yīng)體直撤,節(jié)省傳輸時(shí)間