ale*_*lex 5 etag caching nsurlcache ios afnetworking
我使用NSURLCache带AFNetworking.缓存工作正常,但无法检查是否实际从缓存中检索到响应.要检查缓存版本是否可用,我使用
[[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不正常......
大多数 iOS 网络 API(例如 NSURLConnection)都会自动使用 NSURLCache。您只需要实例化一个 NSURLCache 对象,并在发出任何网络请求之前使用 [NSURLCache setSharedURLCache:] 设置它。
即使设置了 max-age=0,如果提供了 ETag,NSURLCache 也必须存储响应,以便它可以发送下一个请求,并将 If-None-Match 请求头设置为之前的 ETag 值。如果服务器回复 304,则返回缓存的响应。
所以我认为 cachedResponseForRequest: 正在返回缓存的响应,无论它是否实际上有效。
您不需要直接获取缓存。这一切都由 iOS 透明管理。
| 归档时间: |
|
| 查看次数: |
944 次 |
| 最近记录: |