Идеальные заголовки управления кешем HTTP для различных типов ресурсов
Я хочу найти минимальный набор заголовков, которые работают с "всеми" кэшами и браузерами (также при использовании HTTPS!)
На моем веб-сайте у меня будет три вида ресурсов:
(1) Forever cacheable (общедоступный/равный для всех пользователей)
Пример: 0A470E87CC58EE133616F402B5DDFE1C.cache.html(автоматически генерируется GWT)
-
Этим файлам автоматически присваивается новое имя при изменении содержимого (на основе MD5).
-
Они должны кэшироваться как можно больше, даже при использовании HTTPS (поэтому я предполагаю, что я должен установить Cache-Control: public
, особенно для Firefox?)
-
Они не должны требовать от клиента совершить обратный путь к серверу для проверки, если содержимое изменилось.
(2) Временное изменение (общедоступное/равное для всех пользователей)
Примеры: index.html, mymodule.nocache.js
-
Эти файлы меняют свой контент без изменения URL-адреса при развертывании новой версии сайта.
-
Они могут быть кэшированы, но, вероятно, необходимо периодически проверять обратную связь.
(3) Индивидуальный для каждого запроса (частный/пользовательский)
Пример: ответы JSON
- Эти ресурсы никогда не должны кэшироваться без шифрования на диск ни при каких обстоятельствах. (За исключением, может быть, у меня будет несколько конкретных запросов, которые можно кэшировать.)
У меня есть общая идея о том, какие заголовки я, вероятно, буду использовать для каждого типа, но всегда есть что-то, чего я не могу потерять.
Ответы
Ответ 1
Я бы использовал следующие настройки:
-
Cache-Control: max-age=31556926
- Представления могут кэшироваться любым кешем. Кэш-представление следует считать свежим в течение 1 года:
Чтобы отметить ответ как "никогда не истекает", сервер происхождения отправляет Срок действия истекает примерно один год с момента ответа послал. Серверы HTTP/1.1 НЕ ДОЛЖНЫ отправлять даты истечения срока действия более одного год в будущем.
-
Cache-Control: no-cache
- Представления могут быть кэшированы любым кешем. Но кеши должны отправить запрос серверу происхождения для проверки перед выпуском кешированной копии.
-
Cache-Control: no-store
- Кэши не должны кэшировать представление при любых условиях.
Для получения дополнительной информации см. Mark Nottinghams Caching Tutorial.
Ответ 2
Случаи один и два на самом деле являются одним и тем же сценарием.
Вы должны установить Cache-Control: public
, а затем сгенерировать URL-адрес, содержащий номер сборки/версию сайта, чтобы у вас были непреложные ресурсы, которые могут потенциально длиться вечно.
Вы также хотите установить заголовок Expires
в год или более в будущем, чтобы клиент не нуждался в проверке свежести.
В случае 3 для максимальной гибкости вы можете использовать все следующие функции:
"Cache-Control", "no-cache, must-revalidate"
"Expires", 0
"Pragma", "no-cache"