我正在经历一种奇怪的
WKWebView
行为,我已经没有想法了。
有时,假设 50 次加载中有 1 次,
WKWebView
不会执行新请求,而是加载缓存的请求。
URLRequest
使用默认配置。我没有设置自定义缓存策略。所以请求应该使用默认的NSURLRequest.CachePolicy.useProtocolCachePolicy
let request = URLRequest(url: url)
wkWebView.load(request)
Cache-Control
标头public, max-age=9, s-maxage=2592000
WKWebView
会将缓存策略设置为.returnCacheDataElseLoad
。这意味着 WKWebView 会显示过时的内容,从本地缓存加载它。文档 说:
使用现有的缓存数据,无论年龄或到期日期,仅当没有缓存数据时才从原始源加载。NSURLRequest.CachePolicy.returnCacheDataElseLoad
解决办法似乎是使用以下方法清除缓存:
WKWebsiteDataStore.default().removeData(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes(),
for: records,
completionHandler: {
})
但是,这是一种矫枉过正,因为它还清除了其他应该缓存更长时间的内容(例如图像)。
WKWebView
决定使用.returnCacheDataElseLoad
?