在WKWebView中'重载'与'reloadFromOrigin'

Tar*_*rek 7 uikit ios wkwebview

什么之间的区别reload,并reloadFromOriginWKWebView?Apple的文档说reloadFromOrigin:

重新加载当前页面,如果可能,使用缓存验证条件执行端到端重新验证.

但我不确定这究竟意味着什么.

use*_*021 11

我也对此感兴趣.综观WebKit的源(Source/WebCore/loader/FrameLoader.cpp,FrameLoader::addExtraFieldsToRequest(...)周围的if (loadType == FrameLoadType::Reload)条件),它看起来像最关键的区别是在指定哪些额外的HTTP头请求领域.

reloadFromOrigin()Cache-ControlPragma字段设置为no-cache,而简单reload()只在Cache-Control具有max-age=0set 的标题字段中产生.

为了解决这个问题,我查看了HTTP 1.1规范Header Field Definitions部分.第14.9.4节"缓存重新验证和重新加载控件"状态:

客户端可以使用Cache-Control请求指令指定这三种操作:

端到端重新加载 请求包括"无缓存"缓存控制指令,或者为了与HTTP/1.0客户端兼容,"Pragma:no-cache".字段名称不得包含在请求中的no-cache指令中.响应此类请求时,服务器不得使用缓存副本.

特定的端到端重新验证 请求包括"max-age = 0"缓存控制指令,该指令强制每个缓存沿着到源服务器的路径,以使用下一个缓存或服务器重新验证其自己的条目(如果有).初始请求包括客户端当前验证器的缓存验证条件.

未指定的端到端重新验证 请求包括"max-age = 0"cache-control指令,该指令强制每个缓存沿着到源服务器的路径,以使用下一个缓存或服务器重新验证其自己的条目(如果有).初始请求不包括缓存验证条件; 保存此资源的缓存条目的路径上的第一个缓存(如果有)包括使用其当前验证器的缓存验证条件.

从我对规范的阅读来看,它看起来reload()只是用途,max-age=0因此可能会导致您获得所请求数据的缓存但经过验证的副本,而reloadFromOrigin()强制从原始服务器获取新副本.

(这似乎与Apple的WKWebView中的两个函数的头文件/类参考文档相矛盾.我认为两者的描述应该交换 - 我已经向Apple提交了Bug Report/Radar 27020398,如果我听到的话会以任何一种方式更新这个答案从他们回来...)