我正在使用带有默认useProtocolCachePolicy缓存策略的URLSession。使用像Charles I这样的代理可以验证缓存是否按预期用于具有Etag的请求,其中服务器返回的HTTP响应为304(未修改)。但是,URLSession缓存隐藏了此响应代码,而是使用缓存数据执行状态代码为200的请求完成处理程序。我理解这是基本库封装此行为的预期。但是我有一个场景需要在304响应代码上进行UI更改。 在基金会图书馆发挥作用之前,我是否可以使用任何委托或处理程序来查看实际状态代码?
一种可能的解决方法是@ChanchalChauhan暗示,强制URLRequest忽略本地缓存(通过将缓存策略设置为.reloadIgnoringLocalCacheData)并手动添加If-None-Match HTTP标头,其中包含从CachedURLResponse中提取的值请求的URLCache。但是,要使此解决方案完成,只有在缓存的响应已过期时才必须执行此逻辑,否则不需要网络请求。我还没有找到一种方法来确定缓存的值是否已过期。