use*_*021 11
我也对此感兴趣.综观WebKit的源(Source/WebCore/loader/FrameLoader.cpp,FrameLoader::addExtraFieldsToRequest(...)周围的if (loadType == FrameLoadType::Reload)条件),它看起来像最关键的区别是在指定哪些额外的HTTP头请求领域.
reloadFromOrigin()将Cache-Control和Pragma字段设置为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,如果我听到的话会以任何一种方式更新这个答案从他们回来...)
| 归档时间: | 
 | 
| 查看次数: | 4348 次 | 
| 最近记录: |