Кеш ускоряет сайт, но персональные 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 и очистка старых кешей.