Выбор ответа Middle Кеширование обновлено

Почему CDN показал чужой профиль

Вопрос

После включения CDN пользователи иногда видят чужие имена в шапке. Ответ /api/me отдаётся с Cache-Control: max-age=60. Что исправить?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Добавить private (или no-store), чтобы общие кеши не хранили ответ. Без private ответ считается пригодным для общих кешей, и CDN раздаёт профиль одного пользователя всем. private оставляет кеш только в браузере владельца, no-store запрещает хранение совсем.

Варианты ответа

  1. Заменить max-age=60 на max-age=5, чтобы CDN держал ответ меньше
  2. Добавить private (или no-store), чтобы общие кеши не хранили ответправильный ответ
  3. Добавить в ответ ETag, чтобы CDN сверял версию профиля с сервером
  4. Добавить Vary: Accept-Encoding, чтобы копии в CDN разделились

Разбор

Без private ответ считается пригодным для общих кешей, и CDN раздаёт профиль одного пользователя всем. private оставляет кеш только в браузере владельца, no-store запрещает хранение совсем. Уменьшение max-age только сужает окно утечки. ETag не запрещает хранить ответ. Vary: Accept-Encoding разделяет копии по сжатию, а не по пользователю.

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

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