使用max-age = 0自动使NSURLCache失效

时间:2013-05-27 13:57:45

标签: ios caching afnetworking etag nsurlcache

我正在使用NSURLCache AFNetworking。缓存工作正常,但无法检查是否实际从缓存中检索到响应。 要检查缓存版本是否可用,我使用

[[NSURLCache sharedURLCache] cachedResponseForRequest:_request];

检查我的文件的缓存版本。

我的服务器正在发送以下标题:

Cache-Control:public, must-revalidate, max-age=0
ETag:"317a405bf9f69346c1f0438736a3d02e"

这应该基本上确保缓存后的响应在下载后立即失效。 但是,cachedResponseForRequest:仍会在磁盘上加载以前缓存的版本,即使它实际上已过期。

  • NSURLCache永不过期,还是我没有发送正确的标题等?
  • 我在这里错过了什么吗?

修改

我也试过发送

Expires: "Mon, 27 May 2013 14:34:50 GMT"

标头并且仍然从缓存返回响应,即使它已经过期。 我觉得NSURLCache无法正常工作......

1 个答案:

答案 0 :(得分:2)

NSURLCache由大多数iOS网络API(例如NSURLConnection)自动使用。在发出任何网络请求之前,您只需要实例化NSURLCache对象并使用[NSURLCache setSharedURLCache:]在某处设置它。

即使设置了max-age = 0,如果提供了ETag,NSURLCache也必须存储响应,以便它可以发送下一个请求,并将If-None-Match请求标头设置为前一个ETag值。如果服务器回复304,则返回缓存的响应。

所以我认为cachedResponseForRequest:返回缓存的响应,无论它是否真正有效。

您不需要直接获取缓存。它全部由iOS透明管理。