Android WebView 未使用 ETag 进行正确缓存

问题描述 投票:0回答:1

我在 Android/Kotlin 中使用 WebView

settings.cacheMode = LOAD_DEFAULT

服务器不返回任何 Cache-Control: 标头!但它会为所有请求返回有效的 ETag 标头。

我想要的是,WebView 发送所有带有 If-None-Match: 标头的请求,设置为仅在确实需要时下载文件。如果标签匹配,则应使用服务器返回的 304 标头。

但是我发现WebView一直在缓存。至少10分钟以上。看起来很随意。而且它似乎根本没有发送 If-None-Match: 标头,因为服务器从不回复 304 标头。

如果我禁用 WebView 的缓存(cacheMode = LOAD_NO_CACHE),它也不会使用 ETag。相反,它总是加载所有内容(如预期)。

如何让WebView使用Etag来处理缓存?简短的请求和使用 ETag 将是完美的。

它适用于网络应用程序,只有在资源确实发生变化时才应该完全重新加载更大的资源。

android webview browser-cache etag
1个回答
0
投票

简短的回答是,Android WebView 无法使用 ETag 标头来正确缓存。它只进行一些内部缓存。

可以通过回调来实现 ETagIf-Modified-Since 标头的使用。

我找到了一个网站,展示了这是如何完成的: https://medium.com/android-news/reducing-your-networking-footprint-with-okhttp-etags-and-if-modified-since-b598b8dd81a1

简而言之,您拦截流量并围绕您自己的 ETagIf-Modified-Since 标头构建自己的缓存系统。

© www.soinside.com 2019 - 2024. All rights reserved.