我正在使用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
无法正常工作......
答案 0 :(得分:2)
NSURLCache由大多数iOS网络API(例如NSURLConnection)自动使用。在发出任何网络请求之前,您只需要实例化NSURLCache对象并使用[NSURLCache setSharedURLCache:]在某处设置它。
即使设置了max-age = 0,如果提供了ETag,NSURLCache也必须存储响应,以便它可以发送下一个请求,并将If-None-Match请求标头设置为前一个ETag值。如果服务器回复304,则返回缓存的响应。
所以我认为cachedResponseForRequest:返回缓存的响应,无论它是否真正有效。
您不需要直接获取缓存。它全部由iOS透明管理。