Идеальный кэш HTTP управляет заголовками для различных типов ресурсов

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

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

(1) Навсегда кэшируемый (общественность / равняются для всех пользователей),

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

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

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

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

(2) Изменение иногда (общественность / равняются для всех пользователей),

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

  • Эти файлы изменяют свое содержание, не изменяя URL, когда новая версия сайта развертывается.

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

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

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

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

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

81
задан Chris Lercher 8 June 2010 в 07:16
поделиться

2 ответа

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

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

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

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

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

89
ответ дан 24 November 2019 в 09:42
поделиться

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

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

"Cache-Control", "no-cache, must-revalidate"
"Expires", 0
"Pragma", "no-cache"
-2
ответ дан 24 November 2019 в 09:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: