2013-06-30 6 views
7

Мой сервер настраивает элемент заголовка etag для поддержки кеширования.If-None-Match и NSURLConnection

IOS (6.1.4) приложение используют нативный класс NSURLConnection отправить запрос XML на сервер

первый раз, когда сервер отправляет ответ с ETAG, установленной в заголовке

Если прошивка приложение отправляет точно такой же запрос на сервер, я могу видеть в журналах сервера, что заголовок if-none-match не заполняется NSURLConnection

... а затем сервер отвечает 200 вместо 304

политика Cache используется для запроса:

[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad]; 

NSURLCache инициализируется

[[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10]; 

Мои вопросы: - Это нормально, что NSURLConnection не ставил "If-None-матч" поле заголовка ? - Мне нужно установить это поле заголовка самостоятельно? (получение ответа от кеша, чтение значения etag и установка в заголовке запроса)?

ответ

1

Я столкнулся с этой проблемой. Для меня я использовал политику кэша по умолчанию (NSURLRequestUseProtocolCachePolicy), и она автоматически устанавливала поле заголовка «if-none-match», которое будет проверять сервер. Однако установка политики кэша как «NSURLRequestReloadIgnoringLocalCacheData», очевидно, удалила это поле заголовка.

Вы пробовали другие значения политики кэша, чтобы узнать, добавили ли они этот заголовок?

Отличный блог на этих различных значениях политики кэширования можно увидеть здесь: http://nshipster.com/nsurlcache/

редактировать: Я нашел еще один перепускной вопрос стеки, что подтверждает то, что я сказал выше: NSURLCache and ETags

0

Кроме просмотр символов в Xcode (щелкните правой кнопкой мыши по символу и «Перейти к определению»). Есть некоторые, которые присутствуют, но не реализованы, согласно комментариям файла!

Смежные вопросы