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

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

有帮助吗?

解决方案

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

缓存控制响应指令允许源服务器复盖响应的默认可缓存性:私人 指示响应消息的全部或部分用于单个用户,并且不得由共享缓存进行缓存。这允许源服务器声明 响应仅适用于一个用户,而不是其他用户请求的有效响应。私有(非共享)缓存可能会缓存响应。http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1

如果可以接受,请尝试将政策更改为公共。记录来自应用程序的响应标题,并查看您的缓存。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/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top