WebView中設(shè)置緩存的代碼:
WebSettings settings = webView.getSettings();
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 開(kāi)啟 DOM storage API 功能
settings.setDomStorageEnabled(true);
// 開(kāi)啟 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開(kāi)始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用緩存,只從網(wǎng)絡(luò)獲取數(shù)據(jù)。
LOAD_CACHE_ELSE_NETWORK,只要本地有,無(wú)論是否過(guò)期,或者no-cache,都使用緩存中的數(shù)據(jù)。本地沒(méi)有緩存時(shí)才從網(wǎng)絡(luò)上獲取。
LOAD_DEFAULT詳解
瀏覽器緩存機(jī)制是通過(guò)HTTP協(xié)議Header里的Cache-Control(或Expires)和Last-Modified(或 Etag)等字段來(lái)控制文件緩存的機(jī)制
在瀏覽器返回地址,返回的header中會(huì)攜帶如下一個(gè)或多個(gè)參數(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
這個(gè)字段表明該文件在服務(wù)端最后修改的時(shí)間,在webView發(fā)送請(qǐng)求的時(shí)候,會(huì)以If-Modified-Since這個(gè)字段把這個(gè)時(shí)間帶上If-Modified-Since: Wed, 28 Sep 2018 09:24:35 GMT,服務(wù)器接收到請(qǐng)求后,會(huì)把文件的Last-Modified時(shí)間和這個(gè)時(shí)間對(duì)比,如果時(shí)間沒(méi)變,那么瀏覽器將返回304 Not Modified給瀏覽器,有改變,則返回status code=200
ETag:”sjiuwiiu-778”
這是文件的特征串。功能同上面的Last-Modified是一樣的。只是在瀏覽器下次請(qǐng)求時(shí),ETag是作為Request Header中的If-None-Match:"57eb8c5c-129"字段傳到服務(wù)器,服務(wù)器和最新的文件特征串對(duì)比,如果相同那么返回304 Not Modified,不同則返回200 OK