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

ale*_*lex 5 etag caching nsurlcache ios afnetworking

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

[[NSURLCache sharedURLCache] cachedResponseForRequest:_request];
Run Code Online (Sandbox Code Playgroud)

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

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

Cache-Control:public, must-revalidate, max-age=0
ETag:"317a405bf9f69346c1f0438736a3d02e"
Run Code Online (Sandbox Code Playgroud)

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

  • 是否NSURLCache永不过期或我不发送正确的头,等?
  • 我在这里错过了什么吗?

编辑

我也试过发送

Expires: "Mon, 27 May 2013 14:34:50 GMT"
Run Code Online (Sandbox Code Playgroud)

标头和响应仍然从缓存返回,即使它已经过期.我觉得这种感觉NSURLCache不正常......

Tod*_*odd 2

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

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

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

您不需要直接获取缓存。这一切都由 iOS 透明管理。