WebView中設(shè)置緩存的代碼:
WebSettings settings = webView.getSettings();
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 開啟 DOM storage API 功能
settings.setDomStorageEnabled(true);
// 開啟 database storage API 功能
settings.setDatabaseEnabled(true);
settings.setAppCacheEnabled(true);
LOAD_CACHE_ONLY: 不使用網(wǎng)絡(luò)固耘,只讀取本地緩存數(shù)據(jù)。
LOAD_DEFAULT: 根據(jù)cache-control或者Last-Modified決定是否從網(wǎng)絡(luò)上取數(shù)據(jù)镇辉。
LOAD_CACHE_NORMAL: API level 17中已經(jīng)廢棄屡穗,從API level 11開始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用緩存,只從網(wǎng)絡(luò)獲取數(shù)據(jù)忽肛。
LOAD_CACHE_ELSE_NETWORK村砂,只要本地有,無論是否過期屹逛,或者no-cache,都使用緩存中的數(shù)據(jù)。本地沒有緩存時才從網(wǎng)絡(luò)上獲取席镀。
LOAD_DEFAULT詳解
瀏覽器緩存機制是通過HTTP協(xié)議Header里的Cache-Control(或Expires)和Last-Modified(或 Etag)等字段來控制文件緩存的機制
在瀏覽器返回地址诱桂,返回的header中會攜帶如下一個或多個參數(shù)
Cache-Control:max-age=300
Expires: Thu, 31 Dec 2018 23:55:55 GMT
Last-Modified:Wed, 28 Sep 2018 09:24:35 GMT
這個字段表明該文件在服務(wù)端最后修改的時間,在webView發(fā)送請求的時候淑掌,會以If-Modified-Since這個字段把這個時間帶上If-Modified-Since: Wed, 28 Sep 2018 09:24:35 GMT蒿讥,服務(wù)器接收到請求后,會把文件的Last-Modified時間和這個時間對比,如果時間沒變芋绸,那么瀏覽器將返回304 Not Modified給瀏覽器媒殉,有改變,則返回status code=200
ETag:”sjiuwiiu-778”
這是文件的特征串摔敛。功能同上面的Last-Modified是一樣的廷蓉。只是在瀏覽器下次請求時,ETag是作為Request Header中的If-None-Match:"57eb8c5c-129"字段傳到服務(wù)器马昙,服務(wù)器和最新的文件特征串對比桃犬,如果相同那么返回304 Not Modified,不同則返回200 OK