Ios 自动终止NSURLCache,最大期限为0

Ios 自动终止NSURLCache,最大期限为0,ios,caching,afnetworking,etag,nsurlcache,Ios,Caching,Afnetworking,Etag,Nsurlcache,我正在将NSURLCache与AFNetworking一起使用。缓存工作正常,但无法检查是否确实从缓存中检索了响应。 要检查缓存版本是否可用,我使用 [[NSURLCache sharedURLCache] cachedResponseForRequest:_request]; 检查文件的缓存版本 我的服务器正在发送以下标题: Cache-Control:public, must-revalidate, max-age=0 ETag:"317a405bf9f69346c1f0438736a3d

我正在将
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
工作不正常…

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

即使设置了max age=0,如果提供了ETag,NSURLCache也必须存储响应,以便在将if None Match request header设置为前一个ETag值的情况下发送下一个请求。如果服务器回复304,则返回缓存的响应

所以我认为cachedResponseForRequest:返回缓存响应,而不管它是否实际有效

您不需要直接获取缓存。所有这些都由iOS透明管理