UIWebView与缓存策略的奇怪行为

时间:2013-08-13 09:52:08

标签: ios uiwebview nsurlrequestcachepolicy

我遇到UIWebView的问题:

客户要求检查UIWebView的缓存策略,因为据他说,重新加载页面时,服务器上更新的内容没有出现在设备上。

现在,我看到我们传递给NSURLRequest的{​​{1}}有一个UIWebView cachePolicy,可以强制执行客户论文。如果我理解正确,只从服务器加载第一个请求,后续请求从缓存加载。

然后我将cachePolicy更改为NSURLRequestReturnCacheDataElseLoad,因为我在NSURLRequestUseProtocolCachePolicy标题中看到有趣的NSURLRequest.h是“未实现的”。

一切似乎都运行良好,直到我回滚到之前的政策,我看到Charles每次NSURLRequestReloadRevalidatingCacheData消失然后再次出现在屏幕上时,在服务器上发出了新的请求,并且嘲笑简单对结果页面的更改我还可以看到设备上的更改。

服务器返回的标题是btw:

UIWebView

对于8月13日格林威治标准时间11:46(柏林)的请求

所以对我来说标题看起来很好,但每次Date Tue, 13 Aug 2013 09:46:46 GMT Content-Encoding gzip Server Apache ETag "791e833a504a3a0f11fc74605ea244d2" Vary Accept-Encoding Content-Type text/html; charset=utf-8 Cache-Control public, max-age=60 Accept-Ranges bytes Content-Length 2685 Expires Tue, 13 Aug 2013 09:47:46 GMT 都会尝试重新加载内容。

我还查看了UIWebView委托方法,我发现webView:shouldStartLoadWithRequest:navigationType:的{​​{1}}始终设置为1(cachePolicy)。

这怎么可能?还有可能客户抱怨这个问题(他甚至给我发了截图,所以这不是发明的)

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

最后,我使用NSURLRequest手动制作NSURLRequestUseProtocolCachePolicy,然后用NSURLConnection开始{{1}}。然后,我在连接完成加载时加载了HTML字符串。