2012-08-16 56 views
4

Apple支持从iOS 5.0开始的磁盘缓存。我以前使用家庭解决方案,但是我正在测试NSURLCache,希望能够最终使用它,因为我以前看到过奇怪的行为。NSURLCache是​​否删除过期的缓存响应?

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

我愿意接受可能存在一个后台任务,以定期修剪过期的请求。我已经完成了测试,我实际上等待看看请求是否“自然”过期,而不是。

Apple没有正确实现缓存失效吗?

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

+1

+1有趣的问题。 – Till 2012-08-16 23:07:34

+0

一年后,我有同样的问题,缓存的响应永不过期:http://stackoverflow.com/questions/18747090/nsurlcache-cached-response-doesnt-expire – Michal 2013-09-12 09:43:23

回答

1

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

欲了解更多的细节看看http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html