美文网首页
Android WebView缓存

Android WebView缓存

作者: dhhuanghui | 来源:发表于2019-07-27 15:59 被阅读0次

    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缓存

          本文链接:https://www.haomeiwen.com/subject/izderctx.html