【发布时间】:2015-11-23 12:29:44
【问题描述】:
当我尝试使用 nsurlsession 调用 post 请求时无法缓存响应。请帮帮我。
提前致谢
【问题讨论】:
标签: nsurlsession nsurlcache nsurlsessionconfiguration nsurlsessiondatatask
当我尝试使用 nsurlsession 调用 post 请求时无法缓存响应。请帮帮我。
提前致谢
【问题讨论】:
标签: nsurlsession nsurlcache nsurlsessionconfiguration nsurlsessiondatatask
根据 HTTP 规范,POST 请求不是幂等的。具体来说:
因此,NSURL 系列 API 默认拒绝缓存 POST 请求。
有一些方法可以通过创建自定义 NSURLProtocol 对象来显式缓存请求。如果您沿着该路径前进,您必须在进入缓存的过程中重写 URL,以将 POST 正文数据(或其某些部分)作为 URL 的一部分包含在内。如果您不这样做,您将获得与该 URL 的每个 POST 请求相同的缓存响应,而不管实际的 POST 正文内容如何,这可能不是您想要的。
话虽如此,缓存 POST 请求几乎从来都不是正确的做法。如果要缓存,请使用 GET 请求。
【讨论】:
虽然dgatwood 的回答确实有道理(POST 请求不是幂等的,因此不应被缓存),但我不得不不同意 NSURLCache 的行为。
根据我的经验,NSURLCache 会缓存 POST 请求。
如果您查看应用程序的Library/Caches/< App-BundleID >/ 目录中的Cache.db 文件,就会发现这一点。此外,POST 缓存的响应 ARE 实际上是由 NSURLCache 的 - (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request 方法返回的。
您可以在Kumar Saurabh 对您的问题的评论中找到您的回复未缓存的其他可能原因,或者我在此处的回答:NSURLCache: inconsistent behaviour
【讨论】: