Android WebView缓存

WebView中设置缓存的代码:

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: 不使用网络,只读取本地缓存数据。
LOAD_DEFAULT: 根据cache-control或者Last-Modified决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃,从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据。
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。本地没有缓存时才从网络上获取。

LOAD_DEFAULT详解

浏览器缓存机制是通过HTTP协议Header里的Cache-Control(或Expires)和Last-Modified(或 Etag)等字段来控制文件缓存的机制
在浏览器返回地址,返回的header中会携带如下一个或多个参数

Cache-Control:max-age=300

Expires: Thu, 31 Dec 2018 23:55:55 GMT

Last-Modified:Wed, 28 Sep 2018 09:24:35 GMT

这个字段表明该文件在服务端最后修改的时间,在webView发送请求的时候,会以If-Modified-Since这个字段把这个时间带上If-Modified-Since: Wed, 28 Sep 2018 09:24:35 GMT,服务器接收到请求后,会把文件的Last-Modified时间和这个时间对比,如果时间没变,那么浏览器将返回304 Not Modified给浏览器,有改变,则返回status code=200


image.png

image.png

ETag:”sjiuwiiu-778”

这是文件的特征串。功能同上面的Last-Modified是一样的。只是在浏览器下次请求时,ETag是作为Request Header中的If-None-Match:"57eb8c5c-129"字段传到服务器,服务器和最新的文件特征串对比,如果相同那么返回304 Not Modified,不同则返回200 OK

你可能感兴趣的:(Android WebView缓存)