WKWebView中的reload
和reloadFromOrigin
有什么区别?苹果的文档说reloadFromOrigin
:
但是我不确定这到底意味着什么。
最佳答案
我也对此感兴趣。查看WebKit的源代码(Source/WebCore/loader/FrameLoader.cpp
,FrameLoader::addExtraFieldsToRequest(...)
附带条件的if (loadType == FrameLoadType::Reload)
),看起来关键的区别在于指定了哪些额外的HTTP header 请求字段。reloadFromOrigin()
将Cache-Control
和Pragma
字段设置为no-cache
,而简单的reload()
仅导致设置了Cache-Control
的max-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,如果我听到了,将以任何一种方式更新此答案从他们回来...)