Генератор заголовка Cache-Control
Соберите корректный HTTP-заголовок ответа Cache-Control из простых переключателей и человеческих единиц времени, прямо в вашем браузере.
Ваш заголовок Cache-Control собирается локально в вашем браузере из выбранных вами опций, и ничего из настраиваемого не загружается и не хранится на сервере.
Настраиваете сервер? Попробуйте генератор конфигурации nginx.
Об инструменте Генератор Cache-Control
Этот генератор заголовка Cache-Control превращает запутанный набор директив HTTP-кэширования в несколько простых переключателей. Переключите public или private, no-store, no-cache, must-revalidate, proxy-revalidate или immutable и задайте времена жизни вроде max-age, s-maxage, stale-while-revalidate и stale-if-error, используя человеческие единицы вроде часов, дней или лет вместо подсчёта секунд. По мере изменения опций инструмент составляет директивы в каноническом порядке, объясняет простым языком, что именно делает текущий заголовок, и помечает противоречивые сочетания вроде no-store с max-age. Пресеты покрывают повседневные случаи: immutable-статический ресурс на год, всегда ревалидируемый HTML, никогда не хранимые приватные данные и раздельная политика для CDN и браузера. Скопируйте сырой заголовок или готовые фрагменты для nginx, Apache и HTML meta. Всё работает на вашем устройстве, в браузере.
Возможности
- Переключатели для public, private, no-store, no-cache, must-revalidate, proxy-revalidate и immutable
- Человеческие единицы времени (от секунд до лет) для max-age, s-maxage, stale-while-revalidate и stale-if-error
- Составляет директивы в чистом каноническом порядке по мере редактирования
- Объяснение простым языком того, что именно делает текущий заголовок
- Применяет правила взаимного исключения и предупреждает о противоречивых сочетаниях
- Пресеты в один клик для статических ресурсов, всегда ревалидируемого HTML, приватных данных и раздельного кэширования CDN/браузер
- Готовые к копированию фрагменты для сырого заголовка, add_header в nginx, Header set в Apache и HTML meta-тега
- Работает полностью в вашем браузере, поэтому ничего из настраиваемого вами не покидает устройство
Как использовать Генератор Cache-Control
- Выберите пресет или начните с нуля и выберите public или private.
- Переключите нужные директивы, например no-cache, must-revalidate или immutable.
- Введите времена жизни вроде max-age числом и единицей (часы, дни, годы).
- Прочитайте сгенерированное значение заголовка и объяснение простым языком под ним.
- Скопируйте сырой заголовок или нужный фрагмент для nginx, Apache или HTML meta.
Пример
Ввод
public + immutable + max-age = 1 year
Результат
Cache-Control: public, max-age=31536000, immutable
Классическая политика для статического ресурса с отпечатком: кэшировать на год и никогда не ревалидировать.
Частые ошибки и устранение неполадок
- Вы установили no-store, но также добавили max-age или immutable, и они исчезли. — no-store означает, что ничего никогда не кэшируется, поэтому он переопределяет все остальные директивы. Отключите no-store, если вам действительно нужен кэшируемый, но контролируемый ответ.
- Кажется, что immutable не действует. — immutable имеет значение только пока ответ ещё свежий, поэтому сочетайте его с ненулевым max-age. Без max-age нет свежего окна, к которому он применялся бы.
- s-maxage игнорируется вашим CDN, когда заголовок private. — private запрещает общим кэшам хранить ответ вообще, поэтому s-maxage, нацеленный только на общие кэши, никогда не применяется. Используйте public, если хотите, чтобы CDN его кэшировал.
- no-cache с длинным max-age ведёт себя так, будто ответ не кэшируется. — no-cache вынуждает ревалидацию с источником перед каждым повторным использованием, что фактически отменяет свежесть, которую даёт max-age. Уберите одно из двух в зависимости от вашей цели.
Часто задаваемые вопросы
- В чём разница между no-cache и no-store?
- no-store означает, что ответ никогда не должен записываться ни в один кэш, поэтому каждый запрос идёт обратно к источнику. no-cache позволяет хранить ответ, но кэш должен ревалидировать его с источником перед повторной выдачей. no-store — это о том, чтобы не хранить копию; no-cache — о том, чтобы всегда проверять, что хранимая копия ещё актуальна.
- Что делает immutable в заголовке Cache-Control?
- immutable сообщает браузеру, что ресурс никогда не изменится в течение времени жизни его max-age, поэтому он может пропустить ревалидацию, даже когда пользователь нажимает перезагрузку. Он предназначен для версионированных файлов с отпечатком вроде app.9f2c.js, где новая сборка выходит под новым URL, а не перезаписывает старый.
- Чем отличаются max-age и s-maxage?
- max-age задаёт, как долго ответ остаётся свежим в любом кэше, включая браузер. s-maxage переопределяет max-age, но только для общих кэшей вроде CDN и прокси. Установка обоих позволяет кэшировать ответ ненадолго в браузерах, сохраняя его дольше на вашем CDN.
- Когда использовать public, а когда private?
- public позволяет общим кэшам вроде CDN и прокси хранить ответ вместе с браузером. private ограничивает хранение браузером конкретного пользователя, что является правильным выбором для персонализированных или аутентифицированных ответов, которые не должны выдаваться другому пользователю из общего кэша.
- Что делает stale-while-revalidate?
- stale-while-revalidate позволяет кэшу немедленно выдавать слегка устаревший ответ, пока он загружает свежую копию в фоне. Пользователи получают мгновенный ответ, а кэш обновляет себя для следующего запроса, что сглаживает момент истечения ресурса.
- Отправляется ли моя конфигурация на сервер?
- Нет. Заголовок, объяснение и фрагменты собираются в вашем браузере по мере переключения опций, поэтому конфигурация обрабатывается локально на вашем устройстве и ничего не загружается.
Связанные инструменты
Все инструменты ArrayKit