如何在iOS9中基于AFNetworking缓存http响应?

时间:2015-10-13 06:19:23

标签: afnetworking ios9 nsurlcache

我已使用AFNetworking从远程服务器获取http响应。当http请求的标头包含" if-none-match"并且远程服务器将返回304代码。和"缓存控制"字段。

基于NSURLCache类引用,它提供了请求缓存。但是如何将AFNetworkingNSURLCache与远程服务器集成,以便根据Cache-Control section of RFC 2616缓存http响应

P.S :我发现AFNetworking缓存了https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ引用的响应。 因此缓存问题得以解决。但是,当请求的参数总是有一些微小的差别(即签名)时,我还有另一个问题,它不会影响远程服务器的响应。所以我想知道NSURLCache是​​否可以缓存NSURLRequest忽略它的参数。

例如,它已缓存" http://google.com/test?param1=test& sign = 1 "的响应。当我发送" http://google.com/test?param1=test& sign = 2 "到远程服务器,远程服务器返回我想要缓存的相同响应。

1 个答案:

答案 0 :(得分:0)

是的,有点。

  • 创建一个方法,从请求中删除有问题的位并返回修改后的请求。
  • 在会话代理中实施URLSession:dataTask:willCacheResponse:completionHandler:委托方法(或等效的NSURLConnection委托方法,如果您正在使用该API)。
  • 在该方法中,调用strip方法,自己缓存项目,并使用nil响应调用完成处理程序。
  • 在发出请求之前,请调用strip方法并检查该项是否在缓存中。自己检查响应,看它是否仍然有效。如果是这样,请立即归还。否则,请提出请求。

不幸的是,我认为没有比这更自动化的方法了。