AFNetworking不缓存HTTPS请求

时间:2012-10-02 21:26:14

标签: ios caching afnetworking

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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