Вопрос

Мы создаем приложение для iOS, которое использует AFNetworking для подключения к серверу, на котором работает Tornado.Сервер включает заголовок Cache-Control: private, max-age=900 в ответ.При запуске сервера на моем локальном компьютере я могу сказать, что AFNetworking использует кэшированные значения, поскольку сервер не получает никаких запросов при повторных запросах от приложения.Когда мы развертываем один и тот же сервер Tornado на тестовой машине, каждый запрос от приложения приводит к получению запроса на сервере, игнорируя кэшированное значение.

Единственная разница между этими двумя настройками — это URL-адрес сервера и тот факт, что доступ к тестовому серверу осуществляется через соединение HTTPS, а локальный хост использует HTTP.Влияет ли HTTPS на кеширование AFNetworking, и если да, то как мы можем заставить AFNetworking учитывать заголовок кэша?

Это было полезно?

Решение

Не уверен, что это поможет, но все равно вот:AFNetworking использует NSURLConnection, который использует общий кеш NSURLCache.AFNetworking абсолютно прозрачен в отношении кэша и не делает ничего конкретного.Мои запросы https и кешируются нормально.

Директивы ответа Cache-Control позволяют исходному серверу переопределить кэшируемость ответа по умолчанию:Private указывает, что все или часть ответного сообщения предназначено для одного пользователя и не должны кэшироваться общим кешем.Это позволяет серверу происхождения указать, что указанные части ответа предназначены только для одного пользователя и не являются действительным ответом для запросов другими пользователями.Частный (необщий) кеш МОЖЕТ кэшировать ответ.http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1

Если это приемлемо, попробуйте изменить политику на публичную.Зарегистрируйте заголовки ответа от приложения, посмотрите свой кэш.db и посмотрите, действительно ли там что-то кэшируется.

Попробуйте настроить общий кеш - что-то вроде

int cacheSizeMemory = 1*1024*1024; // 4MB
int cacheSizeDisk = 100*1024*1024; // 100MB
[[NSURLCache sharedURLCache] setMemoryCapacity:cacheSizeMemory];
[[NSURLCache sharedURLCache] setDiskCapacity:cacheSizeDisk];

Еще одно хорошее чтение об этом здесьhttp://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top