如何知道NSURLSessionDataTask响应是否来自caching?
我想确定来自NSURLSessionDataTask
的响应是来自caching还是来自服务器
我NSURLSessionDataTask
创build我的NSURLSessionDataTask
request.cachePolicy = NSURLRequestUseProtocolCachePolicy;
想到两个简单的选项:
-
[[NSURLCache sharedURLCache] cachedResponseForRequest:request]
之前调用[[NSURLCache sharedURLCache] cachedResponseForRequest:request]
,存储caching的响应,然后在完成接收数据后再次执行,并比较两个caching的响应以查看它们是否相同。 - 使用
NSURLRequestReturnCacheDataDontLoad
caching策略进行初始请求,如果失败,请使用更合理的策略发出第二个请求。
第一种方法通常是可取的,因为第二种方法将返回caching中存在的数据,即使它是陈旧的。 但是,在一些罕见的情况下(如离线模式),这可能是你想要的,这就是为什么我提到它。
改为使用request.cachePolicy = NSURLRequestReloadIgnoringCacheData
。 NSURLRequestUseProtocolCachePolicy
是默认策略。 基本上,这意味着caching行为在NSURLProtocol
实现或NSURLProtocol
caching策略中NSURLSessionConfiguration
。
如果您的信息需求只是出于好奇,您可以查看您的networking使用Xcode运行时networkingmetics。 将策略更改为不同的设置并观察其差异。