使用Nsurlsession Cache响应发布请求

时间:2015-11-23 12:29:45

标签: nsurlsession nsurlcache nsurlsessionconfiguration nsurlsessiondatatask

当我尝试使用nsurlsession调用post请求时无法缓存响应。请帮帮我。

提前致谢

2 个答案:

答案 0 :(得分:2)

根据HTTP规范,

POST请求不是幂等的。具体做法是:

  • 它们可能有副作用(例如在数据库中存储数据)。
  • 第二次执行POST不一定会返回与第一次执行请求相同的结果。

因此,默认情况下,NSURL系列API拒绝缓存POST请求。

有多种方法可以通过创建自定义NSURLProtocol对象来显式缓存请求。如果沿着这条路走下去,必须在进入缓存的过程中重写URL,以包含POST正文数据(或其中的一部分)作为URL的一部分。如果不这样做,那么对该URL的每个 POST请求都会得到相同的缓存响应,而不管实际的POST正文内容是什么,这可能不是您想要的。

话虽如此,缓存POST请求几乎不是正确的做法。如果您想要缓存,请使用GET请求。

答案 1 :(得分:2)

虽然dgatwood的答案确实有一点(POST请求不是幂等的,因此不应该被缓存),但我不得不对NSURLCache的行为持不同意见。

根据我的经验,NSURLCache DOES 缓存POST请求。

如果您查看应用程序的Cache.db目录中的Library/Caches/< App-BundleID >/文件,这是很明显的。此外,POST缓存的响应 ARE 实际上是由NSURLCache的- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request方法返回的。

您可以在Kumar Saurabh对您的问题的评论或我的答案中找到其他可能导致您的回复未被缓存的原因:NSURLCache: inconsistent behaviour