awesome-everything EN
↑ Обратно к восхождению

Кеширование

Cache-Control: тест с выбором ответа

Суть Тест с выбором на синтез по всему юниту — хранение против ревалидации, TTL общих кэшей, утечка из-за private, immutable-ассеты и отдача устаревшего.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов поперёк всего юнита. Каждый отражает заголовок, который ты реально отправишь — и тихий инцидент, который следует, когда директива делает не то, что подсказывает её имя.

Цель

Убедись, что выбираешь верную директиву для хранения против ревалидации, разделяешь TTL браузера и TTL CDN и рассуждаешь об утечках и ловушках, которые подставляют дефолты.

Викторина

Команда отправляет Cache-Control: no-cache на эндпоинт баланса банка, рассчитывая, что ничего не сохранится. Позже на киоске один клиент видит баланс предыдущего по нажатию «назад». Что пошло не так?

Викторина

Ты ставишь Cache-Control: max-age=0 на HTML, чтобы браузер всегда был свежим. Впереди стоит CDN. Без s-maxage что происходит на CDN?

Викторина

Аутентифицированный маршрут /account отдаётся с Cache-Control: public, max-age=300 за CDN. Каждый посетитель в следующие пять минут видит страницу аккаунта первого пользователя. Корневая причина?

Викторина

Статические бандлы отдаются с Cache-Control: public, max-age=31536000, immutable. Какая единственная практика делает кэш на год безопасным, а не багом на год?

Викторина

JSON-API за CDN отправляет Cache-Control: max-age=60, s-maxage=300, stale-while-revalidate=3600. Какое получится поведение?

Викторина

Ответ ставит Vary: Cookie, чтобы держать страницу залогиненного пользователя вне общих кэшей. Почему это ненадёжный механизм безопасности для персонального контента?

Итог

Сквозная линия юнита — одно дерево решений. Сначала спроси, может ли кэш вообще хранить ответ: no-store — единственная директива, запрещающая хранение, а no-cache лишь форсирует ревалидацию, поэтому no-cache утекает чувствительные данные в браузер и bfcache. Затем раздели уровни: max-age управляет всеми кэшами, s-maxage переопределяет его только для общих кэшей, а private держит ответы на пользователя вне CDN — его отсутствие на аутентифицированном маршруте и есть классическая утечка данных. Для статики public, max-age=31536000, immutable верен только с именами по хешу содержимого, потому что изменённый файл тогда меняет URL. stale-while-revalidate и stale-if-error меняют устарелость на задержку и устойчивость, а Vary ключует варианты, а не исключает разделение — поэтому реальная безопасность всегда живёт в private/no-store.

Продолжить восхождение ↑Cache-Control: свободное воспроизведение
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.