2012-08-16 25 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

相關問題