瀏覽器加載資源成功一般會有幾種狀態
200 ok ---- 從原始服務器請求成功
200 ok from cache ----
200 ok from disk cache ----
200 ok from memory cache ----
304 not modified ---- 向服務器發送請求,驗證新鮮度,足夠新鮮,服務器會返回 304狀態
from cache 表示客戶端沒有請求服務器, 直接使用瀏覽器本地緩存
1. 首先from cache 和 not modified的區別
from cache 瀏覽器沒有和服務器確認,直接使用了緩存
not modified 是瀏覽器和服務器多確認了一次緩存有效性,再用的緩存。
那么,兩者觸發的時機有什么區別呢?200 OK (from cache) 是直接點擊鏈接訪問,輸入網址按回車訪問也能觸發;而 304 Not Modified 是刷新頁面時觸發,或是設置了長緩存、但 Entity Tags 沒有移除時觸發。
直接訪問有緩存的網站都觸發 200 OK (from cache), 刷新瀏覽器則會觸發 304 Not Modified,同一域名下,沒有 Entity Tag 的資源直接訪問,是 200 OK (from cache) 的結果,同一域名下,有 Entity Tag ,直接訪問就會觸發 304 Not Modified。
2. from memory cache 和 from disk cache 的區別
MemoryCache顧名思義,就是將資源緩存到內存中,等待下次訪問時不需要重新下載資源,而直接從內存中獲取。Webkit早已支持memoryCache。
目前Webkit資源分成兩類,一類是主資源,比如HTML頁面,或者下載項,一類是派生資源,比如HTML頁面中內嵌的圖片或者腳本鏈接,分別對應代碼中兩個類: MainResourceLoader和SubresourceLoader。雖然Webkit支持memoryCache,但是也只是針對派生資源,它對應的類為CachedResource,用於保存原始數據(比如CSS,JS等),以及解碼過的圖片數據。
diskCache顧名思義,就是將資源緩存到磁盤中,等待下次訪問時不需要重新下載資源,而直接從磁盤中獲取,它的直接操作對象為CurlCacheManager。它與memoryCache最大的區別在於,當退出進程時,內存中的數據會被清空,而磁盤的數據不會,所以,當下次再進入該進程時,該進程仍可以從diskCache中獲得數據,而memoryCache則不行。
diskCache與memoryCache相似之處就是也只能存儲一些派生類資源文件。它的存儲形式為一個index.dat文件,記錄存儲數據的url,然后再分別存儲該url的response信息和content內容。Response信息最大作用就是用於判斷服務器上該url的content內容是否被修改。具體詳見:
參考連接:
http://div.io/topic/854
https://segmentfault.com/a/1190000008289847
http://blog.csdn.net/m632587166/article/details/50732205?locationNum=14
http://blog.csdn.net/longxibendi/article/details/41630389