3

我有这个问题UIWebView

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

现在,我看到NSURLRequest我们传递给 的UIWebView有一个cachePolicyNSURLRequestReturnCacheDataElseLoad这可以执行客户论点。如果我理解正确的话,只有第一个请求是从服务器加载的,后续请求是从缓存中加载的。

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

一切似乎都很好,直到我回滚到以前的策略并且我在 Charles 上看到每次UIWebView消失然后重新出现在屏幕上时,都会在服务器上完成一个新请求,并模拟对结果页面的简单更改我也可以查看设备上的更改。

服务器返回的标头是顺便说一句:

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

对于 8 月 13 日 11:46 GMT+2(柏林)提出的请求

所以对我来说,标题看起来不错,但UIWebView每次都尝试重新加载内容。

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

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

谢谢您的帮助

4

1 回答 1

0

最终我手动NSURLRequest使用 aNSURLRequestUseProtocolCachePolicy并开始NSURLConnection使用它。然后,当连接完成加载时,我加载了 HTML 字符串。

于 2013-10-08T20:21:24.163 回答