如何知道NSURLSessionDataTask响应是否来自caching?

我想确定来自NSURLSessionDataTask的响应是来自caching还是来自服务器

NSURLSessionDataTask创build我的NSURLSessionDataTask

 request.cachePolicy = NSURLRequestUseProtocolCachePolicy; 

想到两个简单的选项:

  • [[NSURLCache sharedURLCache] cachedResponseForRequest:request]之前调用[[NSURLCache sharedURLCache] cachedResponseForRequest:request] ,存储caching的响应,然后在完成接收数据后再次执行,并比较两个caching的响应以查看它们是否相同。
  • 使用NSURLRequestReturnCacheDataDontLoadcaching策略进行初始请求,如果失败,请使用更合理的策略发出第二个请求。

第一种方法通常是可取的,因为第二种方法将返回caching中存在的数据,即使它是陈旧的。 但是,在一些罕见的情况下(如离线模式),这可能是你想要的,这就是为什么我提到它。

改为使用request.cachePolicy = NSURLRequestReloadIgnoringCacheDataNSURLRequestUseProtocolCachePolicy是默认策略。 基本上,这意味着caching行为在NSURLProtocol实现或NSURLProtocolcaching策略中NSURLSessionConfiguration

如果您的信息需求只是出于好奇,您可以查看您的networking使用Xcode运行时networkingmetics。 将策略更改为不同的设置并观察其差异。