【问题标题】:How to check if UIWebView loads from NSURLCache?如何检查 UIWebView 是否从 NSURLCache 加载?
【发布时间】:2013-05-03 01:31:29
【问题描述】:

实际上我对此有不止一个问题...我对 NSURLCache 和 UIWebViews 还是新手,但我认为不知何故掌握了基础知识。

无论如何,我能够成功地为我的 UIWebView 实现缓存(我认为)。我初始化了 NSURLCache。我的 UIWebView 使用 loadRequest: 方法加载其内容。我将拥有 UIWebView 的 ViewController 分配为委托。我还让 ViewController 实现了 NSURLConnectionDataDelegate。我实现了 connection:willCacheResponse: 方法只是为了在控制台中记录一条消息,以便我可以检查缓存是否完成。我还记录了当前的磁盘和内存使用情况。缓存后它会增加,所以我可以看到它确实有效。

但是,当我再次加载页面时,我认为请求会再次发送到服务器,因为正在调用 connection:didReceiveResponse: 和 connection:willCacheResponse 等连接委托方法。

我还想尝试使用 cachedResponseForRequest: 从缓存中获取 cachedResponse。我在 webViewDidFinishLoad: 中调用了这个方法,但它总是返回 null。缓存真的有用吗?

如何判断 WebView 是否从缓存中加载?我是否在滥用 cachedResponseForRequest:?另一方面,至少应该为缓存提供哪些适当的 Control-Cache 标头值?我正在对 google 的主页 URL 进行测试,它返回其 Cache Control 标头的私有值,但我可以看到缓存有效,因为调用了 connection:willCacheResponse:。

请帮忙?

【问题讨论】:

    标签: ios caching uiwebview nsurlcache


    【解决方案1】:

    如果您运行像 CharlesFiddler 这样的 HTTP 代理,您可以密切关注实际通过网络传输的网络流量(更少)。

    您还可以检查请求/响应标头以查看响应是否确实发往缓存。

    请注意,在某些情况下,您可能会看到条件 GET(返回 304),这意味着客户端请求其缓存中的内容,但仅在服务器具有更新版本时才想下载内容。

    【讨论】:

    • @iOS_newbie - 为什么不呢?我的意思是,如果代理没有显示任何出站请求,您就会知道 webview 是否从缓存中加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2011-02-02
    相关资源
    最近更新 更多