2016-04-25 6 views
6

Я пытаюсь использовать автономный метод кэширования Android, используя OkHttp. Поток, как это:Android OkHttp как обращаться с ETag

  1. Я посылаю запрос HTTP с пустой строкой ETag в поле заголовка if-none-catched на сервер, и сервер возвращает правильную ETag.
  2. Затем я сохраняю ETag и кеширую ответ.
  3. В следующий раз, когда я запускаю тот же служебный вызов, я получаю тот же ETag и устанавливаю его в заголовок HTTP-запроса, и сервер будет возвращать HTTP 304, если ETag тот же.

Моя проблема теперь в том, как я могу хранить и извлекать ETag? Будет ли обрабатываться по умолчанию OkHttp или мне нужно хранить SQLite? Я продолжаю искать Google о том, как OkHttp реализует образец кода ETag, но все, что я получаю, - это обычный метод кэширования. Ссылка Я имею в виду:

  1. I'm trying to use Java's HttpURLConnection to do a "conditional get", but I never get a 304 status code
  2. https://github.com/square/okhttp/wiki/Interceptors
  3. Correct way of setting up cache for OkHttp in Android
  4. https://gist.github.com/polbins/1c7f9303d2b7d169a3b1#file-restcontroller-java-L45

до сих пор, что я достиг только кэш для 1-го вызова службы времени, но никогда не получить последние данные с сервера больше. Цените, если кто-нибудь может предоставить некоторые рекомендации или найти хороший пример дескриптора ETag и if-none-catch динамически для OkHttp для обмена. Любые разъяснения не стесняйтесь спрашивать.

ответ

7

Вам нужно всего лишь enable OkHttp’s response cache. Он будет использовать ETag, если ваш веб-сервер вернет его.

+0

какая часть кода включает/активирует кеш ответов okhttp? Я устанавливаю объект кеша в свой okhttpClient, но это не повлияло на мой ответ, и я даже не получаю etag обратно в качестве заголовка – cloud

+1

Ваш сервер отправляет ETags? Кэш будет использовать их для последующих запросов для одного и того же URL-адреса. –

+0

ya только что обновил и сервер отправил ETags сейчас, теперь у меня есть 2 вопроса: один я не могу получить новый etag из предыдущего ответа, чтобы добавить к следующему запросу; другой - я пытаюсь запросить ETags жесткого кода для тестирования, я успешно получаю 304 от ответа, но не могу прочитать ответ кэша. А также ответ сервера с заголовком Cache-Control «no-cache, max-age = 0», это влияет? – cloud

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

  • Нет связанных вопросов^_^