nsurlconnection - 如何知道 NSURLResponse 是否来自缓存?

标签 nsurlconnection nsurlrequest nsurlcache nsurlconnectiondelegate

我在特定文件夹上设置了 NSURLCache(../../Application Support/Offline 所以它不会被操作系统随机删除),然后我发送一个带有 NSURLRequestReturnCacheDataElseLoad 策略的 NSURLRequest。

如何判断由符合 NSURLConnectionDelegate 的类处理的响应来自缓存还是来自网络?

最佳答案

关于这个问题的好文章:

http://andrewmarinov.com/ioss-corenetwork-lying/

基本上,从 NSHTTPURLResponse 状态码总是 200

因此,如果您确实需要知道,可以在发出请求之前检查该项目是否在缓存中

NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
NSHTTPURLResponse *httpCacheResponse = (NSHTTPURLResponse *)cachedResponse.response;

如果是这样,请保存修改后的“etag”或“modified-date” header
NSString* etag = httpCacheResponse.allHeaderFields[@"etag"];

然后,在响应处理程序中检查 etag 或 modified-date 是否相同。如果是这样,则响应来自缓存!

关于nsurlconnection - 如何知道 NSURLResponse 是否来自缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14685500/

相关文章:

iphone - 如何停止 NSRunLoop

ios - 使用从 NSURLConnection 检索到的数据填充 UITableView

xcode - 使用 xcode 获取 HTTP header

iOS:使用良好授权调用 https://api.dropboxapi.com/2/users/get_current_account 时代码状态 400

iphone - UIWebView 和 NSURLCache 的关系很麻烦

ios - 如何 - [NSURLCache cachedResponseForRequest :] actually get the matching cache?

IPHONE SDK : NSURLConnection asynchronous/wait completion bug ?

ios - 复杂的多线程应用程序的最佳网络解决方案是什么?

ios - iOS NSURLRequests 无法识别 Rails 应用程序 session

swift - Alamofire - NSURLCache 不工作?