2

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

Итак, вот два вопроса:

я) вообще говоря, как именно этот механизм работает в фоновом режиме, какие запросы / ответы сделаны браузером и сервером

II) я создал простой веб-сервис php REST, который обслуживает файл json с помощью запроса GET. И GET - фактически единственный реализованный протокол. В ответ я правильно включаю все необходимые заголовочные файлы. Есть ли что-то на стороне сервера, которое мне нужно реализовать, чтобы сделать мой веб-сервис совместимым с таким механизмом «проверка на последнее обновление, следовательно, служит или нет»? В частности, мой клиент - это приложение для iOS, которое по умолчанию строго следует правилу кэширования http.

1 ответ1

1

HTTP поддерживает несколько форм управления кэшем 1:

Серверный

Сервер может указывать заголовки Cache-Control, ETag, Expires и Last-Modified.

  • Cache-Control содержит общие инструкции, т. Е. Если, как и до того, когда ресурс может быть кэширован.

  • ETag - произвольная, но фиксированная строка, которую сервер изменит при изменении ресурса.

  • Срок действия истекает до тех пор, пока клиенту не придется проверять наличие новой версии ресурса.

    Это обычно используется в сочетании с прерывателями кеша. Если вы обращаетесь к script.js как script.js?versionX (файлы JavaScript будут игнорировать запрос), вы можете установить произвольную дату истечения срока действия. Если скрипт когда-либо изменится, вы можете просто обратиться к нему как к script.js?versionY

  • Last-Modified указывает дату последнего изменения ресурса.

Сторона клиента

Как только клиент кэширует определенный ресурс, используя любой из вышеперечисленных методов, он может действовать следующим образом:

  • Если ресурс еще не истек (Cache-Control и Expires актуальны), не запрашивайте его.

  • Отправьте запрос GET с If-Modified-Since и / или If-None-Match, указывая заголовок ETag и / или Last-Modified, который был получен при кэшировании ресурса.

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

1 Это методы, которые я лично знаю. Там может быть больше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .