浏览器的缓存控制
? ? ? 瀏覽器第一次向服務(wù)器請求資源時,服務(wù)器會發(fā)送完整的文件,并且在發(fā)送文件時還附帶一些額外信息——比如過期時間:Expires:Mon,10 Dec 1999 ?02:25:22GMT。瀏覽器可以把這個額外信息保存在本地(緩存)。
瀏覽器在請求已經(jīng)訪問過的URL時,會判斷是否使用緩存,而瀏覽器的緩存控制分為強緩存和協(xié)商緩存;協(xié)商緩存必須配合強緩存使用。
瀏覽器的第一次緩存:
首先瀏覽器第一次跟服務(wù)器請求一個資源,服務(wù)器在返回這個資源和response header的同時,會根據(jù)開發(fā)者要求或者瀏覽器默認(rèn),在response的header加上相關(guān)的http response header。?
?
瀏覽器再次請求時
?
一、當(dāng)瀏覽器對 某個資源的請求命中了強緩存時,利用Expire或Cache-Control這兩個http response header實現(xiàn):
1:Expire:描述的是一個絕對時間,根據(jù)的是客戶端的時間。用GMT格式的字符串表示,如:Expires:Mon,10 Dec 1999 ?02:25:22GMT,下次瀏覽器再請求同一個資源時,先從客戶端緩存中尋找,找到這個資源后,拿出它的Expire跟當(dāng)前的請求時間比較,如果請求時間在Expire指定的失效時間之前,就能命中緩存,這樣就不用再次到服務(wù)器上去緩存一遍,節(jié)約了資源,但正是因為 是絕對時間,如果客戶端時間被隨意更改一下,這個機制就失效了
所以我們需要Cache-Control:
2、Cache-Control描述的是一個相對時間,在進行命中緩存時,都是利用瀏覽器時間判斷,這兩個header可以只啟用一個,也可以同時啟用,當(dāng)response header中同時存在兩者時,Cache-Control優(yōu)先級高于Expire
二、當(dāng)瀏覽器對某個資源的請求沒有命中強緩存,就會發(fā)一個請求到服務(wù)器,驗證協(xié)商緩存是否命中。如果命中,則還是從客戶端加載,協(xié)商緩存利用的是Last-Modified,if-Mondified-Since和Etag、if-None-Match這兩對header來管理
1.Last-Modified:原理和Expire相同,區(qū)別是它根據(jù)服務(wù)器的時間返回的header來判斷緩存是否存在,但是有時候也會服務(wù)器上資源有變化,但是最后修改時間卻沒有變化的情況,這時候需要ETag
2、Etag、if-None-Match:原理上也是一樣,區(qū)別是瀏覽器跟服務(wù)器請求同一個資源,服務(wù)器在返回同一個資源的同時,在response的header加上ETag的header,這個header是服務(wù)器根據(jù)當(dāng)前請求的資源生成的一個唯一標(biāo)識,這個唯一標(biāo)識就是一個字符串,只有資源有變化,這個字符串就不相同。
? ??
轉(zhuǎn)載于:https://www.cnblogs.com/feilu2016/p/7003826.html
總結(jié)
- 上一篇: 吉利发布会上魅族成C位 魅族20系列外观
- 下一篇: 缓存系列之一:buffer、cache与