Android WebView 不缓存 HTTPS 内容

Posted

技术标签:

【中文标题】Android WebView 不缓存 HTTPS 内容【英文标题】:Android WebView not caching HTTPS content 【发布时间】:2014-02-21 12:19:48 【问题描述】:

我有一个单页 web 应用程序,它显示在 android WebView (Android Jelly Bean) 中。这是一个不错的大小,所以我想尽可能多地利用缓存。

如果应用通过 HTTP 提供服务,缓存会填充到大约 8 兆,并且在应用重新启动时,网络内容几乎会立即从缓存中加载(未观察到网络流量)。

但是,如果应用程序通过 HTTPS 提供服务,则仅使用一小部分缓存(几百 K),并且在应用程序重新启动时,所有 Web 资产(JS / CSS 等)都从再次服务器。由于我没有根设备并且文件看起来已被重命名(例如 webviewCacheChromium/data_0 等),因此很难准确查看正在缓存的文件。

我尝试设置 'Cache-Control: max-age' 响应标头(因为我相信这会在旧版浏览器中强制使用 https 缓存),但没有任何区别。

我找不到任何暗示默认情况下 WebView 不会缓存 https 内容的信息。我相信大多数现代浏览器都是这样运行的——我希望 Android WebView 也能做到这一点。

我在这里遗漏了什么吗?是否需要告知 WebView 缓存 https 内容?

提前致谢,

尼尔。

【问题讨论】:

【参考方案1】:

对问题进行了排序。

以防万一将来有人偶然发现同样的问题....

事实证明,由于 SSL 错误(不幸的是,该错误被应用程序的其他地方吞没了),该应用程序没有被正确缓存。基本上,如果您没有正确设置 SSL 证书,您会看到这样的结果。

检查此扩展 WebViewClient.onReceivedSslError() 并记录任何错误。

我们遇到了几个不同的错误,因为我们的 SSL 证书设置不正确 - 一旦这些问题得到修复,应用就会按预期缓存。

希望这可以节省我浪费的时间:)

【讨论】:

以上是关于Android WebView 不缓存 HTTPS 内容的主要内容,如果未能解决你的问题,请参考以下文章

android中 如何清理webview缓存?

Android 仅加载缓存不起作用。离线显示 WebView

Android webview 中的缓存

Android WebView 实现缓存网页数据

在android中显示缓存的webview版本

从缓存中加载 webview