Ios UIWebView缓存策略的奇怪行为
我在Ios UIWebView缓存策略的奇怪行为,ios,uiwebview,nsurlrequestcachepolicy,Ios,Uiwebview,Nsurlrequestcachepolicy,我在UIWebView中遇到此问题: 客户要求检查我们的UIWebView的缓存策略,因为据他说,服务器上更新的内容在重新加载页面时没有出现在设备上 现在,我看到我们传递给UIWebView的NSURLRequest有一个cachePolicy的NSURLRequestReturnCacheDataElseLoad,它可以强制执行客户论点。如果我理解正确,只有第一个请求从服务器加载,后续请求从缓存加载 然后我将cachePolicy更改为NSURLRequestUseProtocolCacheP
UIWebView
中遇到此问题:
客户要求检查我们的UIWebView
的缓存策略,因为据他说,服务器上更新的内容在重新加载页面时没有出现在设备上
现在,我看到我们传递给UIWebView
的NSURLRequest
有一个cachePolicy
的NSURLRequestReturnCacheDataElseLoad
,它可以强制执行客户论点。如果我理解正确,只有第一个请求从服务器加载,后续请求从缓存加载
然后我将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
始终设置为1(nsurlRequestReloadingLocalCacheData
)
这怎么可能?还有,客户怎么可能抱怨问题(他甚至给我发了一张截图,所以这不是虚构的)
感谢您的帮助最终,我使用NSURLRequestUseProtocolCachePolicy
手动创建了NSURLRequest
,并启动了NSURLConnection
。然后,当连接加载完毕时,我加载了HTML字符串。我遇到了同样的问题。您找到这个问题的解决方案了吗?是的,最终我使用NSURLRequestUseProtocolCachePolicy手动创建了NSURLRequest,并启动了与该策略的NSURLConnection。然后,当连接完成加载时,我加载了HTML字符串。因此,您没有使用UIWebView的loadRequest:函数加载页面,而是手动加载,然后将HTML加载到UIWebView?是的,完全一样。谢谢。你可以回答自己的问题并接受答案。