【问题标题】:Post Request using Nsurlsession Cache response使用 Nsurlsession 缓存响应发布请求
【发布时间】:2015-11-23 12:29:44
【问题描述】:

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

提前致谢

【问题讨论】:

标签: nsurlsession nsurlcache nsurlsessionconfiguration nsurlsessiondatatask


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 2023-03-13
      • 2017-02-22
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      相关资源
      最近更新 更多