WKWebView中的reloadreloadFromOrigin有什么区别?苹果的文档说reloadFromOrigin:



但是我不确定这到底意味着什么。

最佳答案

我也对此感兴趣。查看WebKit的源代码(Source/WebCore/loader/FrameLoader.cppFrameLoader::addExtraFieldsToRequest(...)附带条件的if (loadType == FrameLoadType::Reload)),看起来关键的区别在于指定了哪些额外的HTTP header 请求字段。
reloadFromOrigin()Cache-ControlPragma字段设置为no-cache,而简单的reload()仅导致设置了Cache-Controlmax-age=0 header 字段。

要弄清楚这意味着什么,我查看了Header Field Definitions section of the HTTP 1.1 spec。第14.9.4节“缓存重新验证和重新加载控件”状态:



从我对规范的阅读来看,reload()似乎仅使用max-age=0,因此可能会导致您获取所请求数据的已缓存但经过验证的副本,而reloadFromOrigin()将强制从原始服务器获取新副本。

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

10-07 18:37