2012-08-16 1 views
4

Apple은 iOS 5.0부터 디스크 캐싱을 지원합니다. 이전에 가정용 솔루션을 사용했지만, 과거에는 이상한 행동을 보았 기 때문에 마침내 사용하기를 희망하여 NSURLCache을 테스트하고 있습니다.NSURLCache는 만료 된 캐시 응답을 제거합니까?

더 복잡한 문제 중 하나는 cachedResponseForRequest:이 만료 된 요청을 반환한다는 것입니다. 나는 내가 사용하고있는 iPhone에서 시계를 앞으로 세워서 테스트를 해왔다. 헤더를 파싱하면 장치 시간이 만료 날짜보다 앞서 있음을 명확하게 알 수 있습니다.

일정한 간격으로 만료 된 요청을 제거하는 백그라운드 작업이있을 수 있습니다. 요청이 "자연스럽게"만료되는지 실제로 기다리는 테스트를 수행했으며 그렇지 않은 경우도 있습니다.

애플은 캐시 무효화를 올바르게 구현하지 않았습니까?

Charles 프록시를 사용하여 테스트하고 있습니다. 그것은 tough problem이고 캐시 무효화를 구현해야하는 사람은 부러워하지 않지만 iOS는 이제 성숙한 SDK로 간주됩니다.

+1

+1 흥미로운 문제입니다. – Till

+0

1 년 후 동일한 문제가 발생하지만 캐시 된 응답은 만료되지 않습니다. http://stackoverflow.com/questions/18747090/nsurlcache-cached-response-doesnt-expire – Michal

답변

1

두 가지 http 캐싱 메커니즘이 있습니다. 만료 및 유효성 검사입니다.
응답이 만료되지 않은 경우 클라이언트는 서버에 요청하지 않고 캐시에서 응답을 제공 할 수 있습니다.
클라이언트가 If-Match 또는 If-Modified-Since 헤더 항목을 사용하여 조건부 요청을 할 수 있습니다.
서버가 304 Not Modified으로 응답하면 클라이언트는 만료 된 경우에도 캐시의 데이터를 사용할 수 있습니다.

자세한 내용은 http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html을 참조하십시오.