一:现象
客户端加载过H5页面A,后来H5修改为A'发布之后,在很长一段时间内,客户端一直展示的是A,没有更新为A'。
重启之后依然没有更新,只有清除缓存或者重装APP才会更新。
二:分析
根据现象得出,是由于webview的缓存导致页面一直没有更新。但是为什么没有更新?更新的机制是什么?应该怎么修改?
首先看下客户端的缓存机制,CacheMode一共有五种
CacheMode {
// 如果页面没有强制任何特定行为(依赖服务端控制),如果本地有未过期的缓存,就会直接加载本地缓存,否则就请求网络
LOAD_DEFAULT = -1
// 从API 11开始就废弃了,和LOAD_DEFAULT行为一致
LOAD_NORMAL = 0
// 只要本地有缓存,不管有没有过期,都使用本地缓存。否则就请求网络
LOAD_CACHE_ELSE_NETWORK = 1
// 忽略本地缓存(就算有也不用),直接请求网络
LOAD_NO_CACHE = 2
// 只使用本地缓存,不请求网络
LOAD_CACHE_ONLY = 3
}
重点看下LOAD_DEFAULT模式,这个是依赖服务端配置的缓存策略
http协议缓存机制
http协议缓存机制是指通过 HTTP 协议头里的 Cache-Control(或 Expires)和 Last-Modified(或 Etag)等字段来控制文件缓存的机制。