Идеальные заголовки управления HTTP-кешем для разных типов ресурсов - PullRequest
81 голосов
/ 04 июня 2010

Я хочу найти минимальный набор заголовков, которые работают со "всеми" кешами и браузерами (также при использовании HTTPS !)

На моем веб-сайте у меня будет три вида ресурсов:

(1) Кэшируется навсегда (общедоступно / равно для всех пользователей)

Пример: 0A470E87CC58EE133616F402B5DDFE1C.cache.html ( автоматически сгенерировано GWT )

  • Этим файлам автоматически присваивается новое имя при изменении содержимого (на основе MD5).

  • Они должны максимально кэшироваться, даже при использовании HTTPS (поэтому я полагаю, мне следует установить Cache-Control: public, особенно для Firefox?)

  • Они не должны требовать, чтобы клиент совершил двустороннюю проверку на сервер для проверки, если содержание изменилось.

(2) Время от времени меняется (общедоступный / одинаковый для всех пользователей)

Примеры: index.html, mymodule.nocache.js

  • Эти файлы изменяют свое содержимое без изменения URL-адреса при развертывании новой версии сайта.

  • Они могут быть кэшированы, но, вероятно, каждый раз требуется повторная проверка для повторной проверки.

(3) Индивидуально для каждого запроса (частный / для конкретного пользователя)

Пример: ответы JSON

  • Эти ресурсы никогда не должны кэшироваться незашифрованными на диск ни при каких обстоятельствах. (За исключением, может быть, у меня будет несколько конкретных запросов, которые могут быть кэшированы.)

У меня есть общее представление о том, какие заголовки я бы, вероятно, использовал для каждого типа, но всегда есть что-то, чего мне не хватает.

Ответы [ 2 ]

89 голосов
/ 09 июня 2010

Я бы, вероятно, использовал эти настройки:

  1. Cache-Control: max-age=31556926 - Представления могут кэшироваться любым кешем. Кэшированное представление считается свежим на 1 год:

    Чтобы пометить ответ как «никогда не истекает», исходный сервер отправляет Срок действия истекает дата примерно через год с момента ответа послал. Серверы HTTP / 1.1 НЕ ДОЛЖНЫ отправлять Срок действия дат более одного год в будущем.

  2. Cache-Control: no-cache - Представления могут кэшироваться любым кешем. Но кэши должны отправить запрос на исходный сервер для проверки перед выпуском кэшированной копии.
  3. Cache-Control: no-store - Кэши не должны кэшировать представление ни при каких условиях.

См. Марк Ноттингем Кэширование Учебник для получения дополнительной информации.

0 голосов
/ 08 июня 2010

Случаи один и два на самом деле один и тот же сценарий. Вы должны установить Cache-Control: public, а затем сгенерировать URL-адрес, включающий номер сборки / версию сайта, чтобы у вас были неизменные ресурсы, которые потенциально могли бы существовать вечно. Вы также хотите установить заголовок Expires на год или более в будущем, чтобы клиенту не нужно было выполнять проверку свежести.

В случае 3 для максимальной гибкости вы можете выполнить все перечисленные ниже действия:

"Cache-Control", "no-cache, must-revalidate"
"Expires", 0
"Pragma", "no-cache"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...