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


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

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

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

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

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

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

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

(2) периодически меняется (public / equal для всех пользователей)

примеры: индекс.формат html, сборка mymodule.nocache.js

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

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

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

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

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

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

2 77

2 ответа:

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

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

    , чтобы пометить ответ как "никогда не истекает," исходный сервер отправляет истекает дата приблизительно один год с момента ответа отправленный. HTTP / 1.1 серверы не должны отправлять истекает времени больше, чем один год в будущее.

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

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

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

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

"Cache-Control", "no-cache, must-revalidate"
"Expires", 0
"Pragma", "no-cache"