为什么WKWebView不应该加载缓存内容?

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

我正在经历一种奇怪的

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
  • Web 视图不运行请求而是从缓存加载请求,从而有效忽略后端缓存策略的原因可能是什么?
ios swift caching wkwebview
© www.soinside.com 2019 - 2024. All rights reserved.