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