17

我在一个特定的文件夹上设置NSURLCache(../../Application Support/Offline,所以它不会被操作系统随机删除),然后用NSURLRequestReturnCacheDataElseLoad策略发送一个NSURLRequest。如何知道NSURLResponse是否来自缓存?

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

这里有关问题

回答

6

好文章:

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

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

所以,如果你真的需要知道,你可以检查的项目是缓存在您提出请求之前

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

如果是这样保存修改过的'etag'或'modified-date'标头

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

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

+0

这基本上是我最终做的 – greg3z

+2

你可以随时回答你自己的问题!会救我一个小时的生命;-) –

相关问题