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

Кеширование

Cache-Control: чтение заголовков

Суть Читай реальные заголовки Cache-Control и ответ CDN, предсказывай поведение браузера и CDN и выбирай верную директиву для сценария.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Баги кэширования читаются прямо на проводе — в заголовках ответа и в строке cache-status CDN. Читай каждый набор заголовков, предсказывай, что делает с ним каждый уровень цепочки, затем выбирай исправление, которое отправит senior-инженер.

Цель

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

Сниппет 1 — «защищённый» эндпоинт

GET /api/account/balance HTTP/1.1

200 OK
Cache-Control: no-cache
Content-Type: application/json
Викторина

Этот эндпоинт баланса на пользователя отправляет no-cache и без ETag. Каково реальное поведение и что надо отправлять вместо этого?

Сниппет 2 — HTML за CDN

200 OK
Cache-Control: public, max-age=31536000
Content-Type: text/html; charset=utf-8
Викторина

Этот заголовок стоит на index.html сайта, отдаваемом через CDN. Что идёт не так и какой верный заголовок для HTML, ссылающегося на ассеты с хешем содержимого?

Сниппет 3 — no-cache против no-store, бок о бок

# Ответ A
Cache-Control: no-cache, private
ETag: "v9"

# Ответ B
Cache-Control: no-store
Викторина

Страница результатов поиска, дешёвая в ревалидации и нечувствительная, использует Ответ A; страница сброса пароля использует Ответ B. Каждый выбор верен?

Сниппет 4 — строка ответа CDN

200 OK
Cache-Control: max-age=60, s-maxage=300, stale-while-revalidate=3600
Age: 420
CF-Cache-Status: HIT
Викторина

CDN возвращает это для JSON-API. Age=420 превышает s-maxage=300, но это HIT. Это корректно и что получает клиент?

Итог

Каждый баг кэширования читается из заголовков. no-cache без ETag на данных на пользователя — это хранимая, неэффективно ревалидируемая утечка — отправляй private, no-store. max-age на год на HTML замораживает деплои, потому что правило — хешировать ассеты и держать HTML ревалидируемым. no-cache плюс ETag — верный выбор для дешёвого нечувствительного контента, переиспользуемого через 304; no-store — для данных, которые нельзя хранить вообще. А HIT CDN с Age за s-maxage корректен по stale-while-revalidate — устаревшее-но-мгновенное по замыслу, с фоновым обновлением. Читай директивы по уровням, подбирай под разделение и чувствительность данных, затем проверяй на проводе.

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

Trademarks belong to their respective owners. Editorial reference only.