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

Raf*_*fAl 8 caching ios swift wkwebview

我正在经历一种奇怪的WKWebView行为,并且我已经没有想法了。

  • 有时,假设 50 次加载中有 1 次,WKWebView不会执行新的请求,而是加载缓存的请求。

  • URLRequest使用默认配置。我没有设置自定义缓存策略。所以请求应该使用默认的 NSURLRequest.CachePolicy.useProtocolCachePolicy

let request = URLRequest(url: url)
wkWebView.load(request)
Run Code Online (Sandbox Code Playgroud)
  • 服务器使用以下Cache-Control标头进行响应
public, max-age=9, s-maxage=2592000
Run Code Online (Sandbox Code Playgroud)
  • 我通过记录请求详细信息发现有时WKWebView会将缓存策略设置为.returnCacheDataElseLoad. 这意味着 WKWebView 会显示过时的内容,从本地缓存加载它。

文档说: NSURLRequest.CachePolicy.returnCacheDataElseLoad 使用现有的缓存数据,无论年龄或到期日期,仅当没有缓存数据时才从原始源加载。

似乎解决方法是使用以下命令清除缓存:

public, max-age=9, s-maxage=2592000
Run Code Online (Sandbox Code Playgroud)

然而,这是一种矫枉过正,因为它还清除了其他应该缓存更长时间的东西(例如图像)。

  • 为什么WKWebView决定使用.returnCacheDataElseLoad
  • Web 视图不运行请求而是从缓存加载请求,从而有效地忽略后端缓存策略的原因可能是什么?