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