我在特定文件夹上设置了 NSURLCache(../../Application Support/Offline 所以它不会被操作系统随机删除),然后我发送一个带有 NSURLRequestReturnCacheDataElseLoad 策略的 NSURLRequest。
如何判断由符合 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”标头
NSString* etag = httpCacheResponse.allHeaderFields[@"etag"];
然后,在响应处理程序中检查 etag 或 modified-date 是否相同。如果是这样,则响应来自缓存!