Отправка запроса с использованием ответа Nsurlsession Cache

Когда я пытаюсь вызвать запрос с помощью nsurlsession, я не могу кэшировать ответ. Пожалуйста, помогите мне.

заранее спасибо

2 ответа

POST-запросы не являются, согласно спецификации HTTP, идемпотентными. В частности:

  • Они могут иметь побочные эффекты (например, хранение данных в базе данных).
  • Выполнение POST во второй раз не обязательно возвращает тот же результат, что и выполнение запроса в первый раз.

По этой причине семейство API NSURL по умолчанию отказывается кэшировать POST-запросы.

Существуют способы явного кэширования запроса путем создания пользовательского объекта NSURLProtocol. Если вы идете по этому пути, вы должны переписать URL-адрес на пути в кэш, чтобы включить данные тела POST (или некоторую их часть) в качестве части URL-адреса. Если вы этого не сделаете, вы получите тот же кэшированный ответ для каждого запроса POST на этот URL, независимо от фактического содержимого тела POST, что, вероятно, не то, что вы хотите.

При этом кеширование POST-запросов почти никогда не является правильным решением. Если вы хотите кэшировать, используйте запрос GET.

Хотя dgatwood имеет смысл (запросы POST не являются идемпотентными и поэтому не должны кэшироваться), я должен не согласиться с поведением NSURLCache.

По моему опыту NSURLCache ДЕЛАЕТ кеш-запросы POST.

Это очевидно, если вы посмотрите на свой Cache.db файл в вашем приложении Library/Caches/< App-BundleID >/ каталог. Кроме того, кэшированные ответы POST фактически возвращаются NSURLCache - (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request метод.

Вы можете найти другие возможные причины, по которым ваши ответы не будут кэшироваться, в комментарии Kumar Saurabh к вашему вопросу или в моем ответе здесь: NSURLCache: противоречивое поведение

Другие вопросы по тегам