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

时间:2013-02-04 11:10:16

标签: nsurlconnection nsurlrequest nsurlcache nsurlconnectiondelegate

我在特定文件夹上设置了NSURLCache(../../Application Support / Offline,因此它不会被OS随机删除),然后我发送NSURLRequest和NSURLRequestReturnCacheDataElseLoad策略。

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

1 个答案:

答案 0 :(得分:8)

关于这个问题的好文章:

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

基本上,从NSHTTPURLResponse开始,状态代码始终为200

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

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

如果是这样,请保存修改过的' etag'或者'修改日期'头

NSString* etag = httpCacheResponse.allHeaderFields[@"etag"];

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