1

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

提前致谢

4

2 回答 2

2

尽管dgatwood的回答确实有道理(POST 请求不是幂等的,因此不应被缓存),但我不得不不同意 NSURLCache 的行为。

以我的经验 NSURLCache确实缓存 POST 请求。

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

您可以在Kumar Saurabh对您的问题的评论或我的回答中找到其他可能导致您的响应没有被缓存的原因: NSURLCache:不一致的行为

于 2016-01-25T18:19:12.530 回答
2

根据 HTTP 规范,POST 请求不是幂等的。具体来说:

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

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

有一些方法可以通过创建自定义 NSURLProtocol 对象来显式缓存请求。如果您沿着该路径前进,则必须在进入缓存的过程中重写 URL,以将 POST 正文数据(或其某些部分)作为 URL 的一部分。如果不这样做,无论实际的 POST 正文内容如何,​​对于该 URL 的每个POST 请求,您都会得到相同的缓存响应,这可能不是您想要的。

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

于 2015-12-03T21:36:59.170 回答