advanced
Caching и compression
Проектируйте HTTP caching через Cache-Control, validators, surrogate caches, Vary, invalidation, gzip/Brotli и payload trade-offs.
HTTP-кэширование использует freshness (`Cache-Control: max-age`, `s-maxage` для shared caches) и валидаторы (`ETag`, `Last-Modified`). Условные запросы (`If-None-Match`) возвращают 304 при неизменном контенте.
`Vary` сообщает кэшам, какие request headers влияют на ответ — критично для `Accept-Encoding` и авторизованных вариантов. `stale-while-revalidate` и `stale-if-error` смягчают поведение CDN при сбоях origin.
Сжатие (gzip, Brotli) меняет CPU на байты. Сжимайте текст (JSON, HTML, CSS); пропускайте уже сжатые форматы.
Cache-Control: public, max-age=60, s-maxage=300, stale-while-revalidate=30
Content-Encoding: br
Vary: Accept-Encoding
На интервью: ключи кэша для персонализированного и публичного контента; cache poisoning при неверном `Vary`; сжатие в app vs reverse proxy.
Типовые ошибки: кэширование приватных данных как public; ETag на динамических секретах; сжатие мелких ответов, где overhead побеждает.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- Разделяйте private browser cache и shared CDN.
- TTL + валидаторы для крупных тел.
- Vary для encoding и auth-вариантов.
- Сжимайте на edge, если CPU дешевле egress.