Кеш ускоряет сайт, но персональные API-ответы кешировать опасно. Особенно если service worker сохраняет ответы без учета пользователя, токена и приватности данных.

Такая ошибка может привести к показу чужих заказов, профиля, баланса или документов. Это уже не просто баг, а риск утечки данных.

Коротко: нужно исключить приватные API из кеша, настроить Cache-Control и очистить уже сохраненные ответы.

Почему возникает проблема

Проблема возникает, когда service worker перехватывает все GET-запросы, proxy кеширует API без Vary/Authorization, или frontend использует одну cache-first стратегию для статики и персональных данных.

Что проверяю в первую очередь

  • какие URL перехватывает service worker
  • попадают ли API-ответы в Cache Storage
  • есть ли Cache-Control: no-store для приватных данных
  • учитывается ли Authorization
  • может ли другой аккаунт увидеть старый ответ

Как исправляю

Я разделяю публичную статику и приватный API, затем очищаю опасные кеши и добавляю серверные заголовки.

  • исключаю приватные API из service worker cache
  • ставлю no-store для персональных ответов
  • проверяю proxy/CDN кеш
  • очищаю старые cache storage
  • добавляю тест на смену пользователя

Что подготовить перед обращением

  • ссылка на сайт или кабинет
  • скриншот проблемы
  • пример пользователя, заказа или события
  • время, когда ошибка повторялась
  • доступы или выгрузка логов без лишних персональных данных

Какой результат нужен

Персональные данные всегда приходят только с сервера для текущего пользователя и не остаются в общем кеше.

Чего лучше не делать

Не кешируйте все GET-запросы автоматически. GET не означает, что ответ публичный.

Вопросы и ответы

Можно ли кешировать профиль пользователя?

Лучше не кешировать через общий service worker, если нет четкой привязки к пользователю.

Что важнее: service worker или серверные заголовки?

Нужно исправить оба уровня.

Надо ли чистить старый кеш?

Да, иначе проблема может жить у уже посетивших пользователей.

Нужна похожая задача?

Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Коротко опишите проблему, приложите ссылку, скриншот, лог ошибки или пример заказа, и я подскажу, с чего безопасно начать исправление.

Итог

Приватный API нельзя смешивать со статическим кешем. Нужны исключения в service worker, no-store и очистка старых кешей.