Ответ вслух Middle Кеширование обновлено

Как настроить кеш для веб-приложения

Вопрос

Как бы ты настроил HTTP-кеширование для SPA с API и CDN перед ним?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Я разделяю ресурсы по тому, как часто они меняются и чьи они.

Что должно прозвучать в ответе

  • Статика с хешем в имени: public, max-age на год, immutable

  • index.html: no-cache, всегда ревалидировать

  • Персональные ответы API: private или no-store, чтобы CDN не раздал чужое

  • Публичные данные API: короткий s-maxage и stale-while-revalidate

  • ETag для дешёвой ревалидации, Vary при разных ответах на один URL

Что могут спросить следом

  • Как быстро откатить сломанный релиз, если HTML закеширован в CDN?
  • Чем no-cache отличается от no-store?
  • Что будет, если забыть Vary: Accept-Encoding?

Разбор

Я разделяю ресурсы по тому, как часто они меняются и чьи они. Бандлы, шрифты и картинки сборки имеют хеш в имени, поэтому отдаю их с public, max-age=31536000, immutable: новая версия придёт по новому URL. index.html отдаю с no-cache, чтобы браузер и CDN каждый раз сверяли его по ETag и пользователь сразу получал ссылки на новый билд. Ответы API про конкретного пользователя помечаю private или no-store, иначе CDN может раздать один профиль всем. Публичные данные вроде каталога кеширую в CDN на короткое время через s-maxage со stale-while-revalidate, чтобы снять нагрузку с бэкенда без заметной задержки обновлений. Если на один URL бывают разные ответы, ставлю Vary.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.