Как настроить кеш для веб-приложения
Вопрос
Как бы ты настроил 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 ошибок.