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.