在瀏覽器輸入網(wǎng)址發(fā)生的幾種緩存:
1、dns緩存
2、本地緩存(memory)
3、http緩存
4、服務(wù)端緩存
一、DNS緩存
我們所用的網(wǎng)址一般是一個(gè)域名,通過這個(gè)域名,解析出對(duì)應(yīng)的ip地址就是dns解析的過程。在解析后將獲得的ip地址緩存起來,當(dāng)下一次再有相同域名的請(qǐng)求時(shí),先從瀏覽器自身的dns緩存進(jìn)行查找,如果緩存有效,會(huì)直接返回ip地址,如果找不到,則繼續(xù)讀取操作系統(tǒng)hosts文件看是否存在映射關(guān)系,如果存在,解析結(jié)束,如果不存在,繼續(xù)在本地dns服務(wù)器中查找,如果還找不到,會(huì)向根服務(wù)器發(fā)出請(qǐng)求,進(jìn)行遞歸查找。
三、本地緩存
不受開發(fā)者控制,當(dāng)資源被放入內(nèi)存后,下次請(qǐng)求,將不再通過網(wǎng)絡(luò),而是直接從內(nèi)存讀取
memory cache 機(jī)制保證了一個(gè)頁面中如果有兩個(gè)相同的請(qǐng)求,只會(huì)請(qǐng)求一次。
四、HTTP緩存(硬盤緩存)
- 1、 http緩存機(jī)制
瀏覽器每次發(fā)起請(qǐng)求,都會(huì)在瀏覽器中查找該請(qǐng)求的結(jié)果與緩存標(biāo)識(shí)。
瀏覽器每次拿到請(qǐng)求結(jié)果,都會(huì)把請(qǐng)求結(jié)果和緩存標(biāo)識(shí)存入瀏覽器緩存。 - 2、http緩存分類。
- 強(qiáng)制緩存
通過Expires和Cache-Control來控制,Cache-Control優(yōu)先級(jí)更高
Cache-Control取值
(1)public:所有內(nèi)容都將被緩存(客戶端和代理服務(wù)器都可緩存)
(2)private:所有內(nèi)容只有客戶端可以緩存,Cache-Control的默認(rèn)取值
(3)no-cache:客戶端緩存內(nèi)容,但是是否使用緩存則需要經(jīng)過協(xié)商緩存來驗(yàn)證決定
(4)no-store:所有內(nèi)容都不會(huì)被緩存,即不使用強(qiáng)制緩存,也不使用協(xié)商緩存
(5)max-age=xxx (xxx is numeric):緩存內(nèi)容將在xxx秒后失效
示例:Cache-Control: public, max-age=3600表示這是一個(gè)公開資源,請(qǐng)緩存1個(gè)小時(shí)。 - 協(xié)商緩存
強(qiáng)制緩存失效后,會(huì)向服務(wù)器發(fā)起一個(gè)帶有緩存的請(qǐng)求,由服務(wù)器根據(jù)緩存標(biāo)識(shí)決定是否使用該緩存。
協(xié)商緩存生效,返回304,協(xié)商緩存失效,返回200和請(qǐng)求結(jié)果,同時(shí)可以附帶上新的緩存指令,瀏覽器緩存新的內(nèi)容。
If-Modified-Since:資源上次修改時(shí)間
If-None-Match:資源編號(hào) 優(yōu)先級(jí)更高