1

我们正在构建一个使用 AFNetworking 连接到运行 Tornado 的服务器的 iOS 应用程序。服务器Cache-Control: private, max-age=900在响应中包含标头。在我的本地计算机上运行服务器时,我可以看出 AFNetworking 使用缓存的值,因为服务器没有收到来自应用程序的重复请求的请求。当我们将相同的 Tornado 服务器部署到测试机器时,来自应用程序的每个请求都会导致服务器上收到一个请求,而忽略缓存的值。

两种设置之间的唯一区别是服务器的 URL 以及测试服务器是通过 HTTPS 连接访问的事实,而 localhost 使用 HTTP。HTTPS 是否会影响 AFNetworking 的缓存,如果是,我们如何让 AFNetworking 尊重缓存标头?

4

1 回答 1

6

不确定它是否会有所帮助,但无论如何:AFNetworking 使用 NSURLConnection,它使用 NSURLCache 共享缓存。AFNetworking 在缓存方面绝对透明,不做任何具体的事情。我的请求是 https 并且缓存得很好。

Cache-Control 响应指令允许源服务器覆盖响应的默认可缓存性: private 表示响应消息的全部或部分是针对单个用户的,并且不得由共享缓存缓存。这允许源服务器声明响应的指定部分仅针对一个用户,而不是对其他用户请求的有效响应。私有(非共享)缓存可以缓存响应。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1

如果可以接受,请尝试将政策更改为 public 。记录来自应用程序的响应的标头并查看您的 cache.db 并查看是否确实存在缓存。

尝试配置共享缓存 - 类似于

int cacheSizeMemory = 1*1024*1024; // 4MB
int cacheSizeDisk = 100*1024*1024; // 100MB
[[NSURLCache sharedURLCache] setMemoryCapacity:cacheSizeMemory];
[[NSURLCache sharedURLCache] setDiskCapacity:cacheSizeDisk];

另一个很好的阅读这里 http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/

于 2012-10-03T01:09:57.643 回答