Автоматическое истечение срока действия NSURLCache с max-age=0

Я использую NSURLCache с AFNetworking. Кэширование работает нормально, но нет возможности проверить, действительно ли ответ был извлечен из кеша. Чтобы проверить, доступна ли кешированная версия, я использую

[[NSURLCache sharedURLCache] cachedResponseForRequest:_request];

чтобы проверить кэшированную версию моего файла.

Мой сервер отправляет следующие заголовки:

Cache-Control:public, must-revalidate, max-age=0
ETag:"317a405bf9f69346c1f0438736a3d02e"

В основном это должно гарантировать, что кэшированный ответ устарел сразу после загрузки. Однако cachedResponseForRequest: по-прежнему загружает на диск предыдущую кэшированную версию, даже если срок ее действия истек.

  • Срок действия NSURLCache никогда не истекает, или я отправляю неправильные заголовки и т. д.?
  • Я пропустил что-то еще здесь?

ИЗМЕНИТЬ

Я также пытался отправить

Expires: "Mon, 27 May 2013 14:34:50 GMT"

заголовок, и ответ все еще возвращается из кеша, даже если срок его действия уже истек. У меня такое ощущение, что NSURLCache работает неправильно...


person alex    schedule 27.05.2013    source источник


Ответы (1)


NSURLCache автоматически используется большинством сетевых API iOS (например, NSURLConnection). Вам просто нужно создать экземпляр объекта NSURLCache и установить его с помощью [NSURLCache setSharedURLCache:] где-нибудь, прежде чем делать какой-либо сетевой запрос.

Даже если установлено значение max-age=0, если предоставлен ETag, NSURLCache должен сохранить ответ, чтобы он мог отправить следующий запрос с заголовком запроса If-None-Match, установленным на предыдущее значение ETag. Если сервер отвечает кодом 304, он возвращает кешированный ответ.

Поэтому я думаю, что cachedResponseForRequest: возвращает кешированный ответ независимо от того, действительно ли он действителен или нет.

Вам не нужно будет получать кеш напрямую. Все это прозрачно управляется iOS.

person Todd    schedule 22.05.2014