5

Apple 从 iOS 5.0 开始支持磁盘缓存。我以前使用的是家庭解决方案,但我正在测试NSURLCache希望最终使用它,因为我过去曾看到过奇怪的行为。

我遇到的一个更令人困惑的问题是cachedResponseForRequest:返回过期的请求。我一直在通过在我正在使用的 iPhone 上设置时钟来进行测试。解析标头清楚地表明设备时间早于到期日期。

我愿意接受可能存在定期修剪过期请求的后台任务。我已经进行了测试,实际上我在等待查看请求是否“自然”过期,但事实并非如此。

Apple 是否未能正确实现缓存失效?

我正在使用Charles代理进行测试。这是一个棘手的问题,我不羡慕任何必须实现缓存失效的人,但iOS现在应该是一个成熟的SDK。

4

1 回答 1

1

有两种http缓存机制:过期和验证。
如果响应没有过期,客户端可以从缓存中提供它而不向服务器发出请求。
如果它已过期,则客户端可以使用If-MatchIf-Modified-Since标头条目发出条件请求。
如果服务器以 响应304 Not Modified,则客户端可以使用缓存中的数据,即使它已过期。

有关更多详细信息,请查看http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html

于 2014-06-12T13:15:16.853 回答