Как устроено · s5w

Кэширование

Заголовок Cache-Control собирается для каждой отдачи из политики бакета, папки и срока жизни самого файла.

Видимость

visibility Имя Cache-Control Кто кэширует
1 SHARED public, max-age=…, immutable браузер и CDN
2 PRIVATE private, max-age=… только браузер
3 NO_STORE no-store никто

Откуда берутся значения

  1. Папка

    Если у папки задана своя политика (PATCH /v1/folders/{name}/cache), берётся она.

  2. Бакет

    Иначе — политика бакета, она задаётся в панели.

  3. Окружение

    Если max-age не задан нигде — CACHE_DEFAULT_MAX_AGE (86400) для SHARED и CACHE_PRIVATE_MAX_AGE (0) для PRIVATE.

Правила поверх

  • Непубличный файл и каналы /p, /t — всегда не выше PRIVATE: такой ответ не должен попасть в общий кэш CDN.
  • max-age не дольше жизни. Если у файла есть срок хранения или отдача идёт по временной ссылке, max-age обрезается до оставшегося времени.
  • max-age=0 превращается в max-age=0, must-revalidate — кэш обязан переспрашивать, а ETag делает такой запрос дешёвым (304).

immutable

Содержимое файла по адресу не меняется — новая версия получает новый id. Поэтому для SHARED безопасно ставить большой max-age: immutable избавляет и от повторных проверок.