Почему пользователи с разными правами получают разные версии файла по одной ссылке?
Что проверяют
Умение строить и разделять гипотезы вместо описания симптома. За словом «одна ссылка» прячется цепочка: браузер, промежуточный кеш и сеть доставки контента, балансировщик, несколько экземпляров приложения, хранилище. Разные ответы по одному адресу возможны почти на каждом звене, и проверяют, знаете ли вы, как отсечь лишние.
Как отвечать
Перечислите основные версии и сразу способ проверки каждой.
- Кеширование приватного ответа. Ответ закеширован без учёта прав: не выставлен заголовок
Varyпо авторизации,Cache-Controlразрешает общий кеш. Проверка: заголовки ответа, признак попадания в кеш и его возраст, повтор запроса в обход сети доставки контента напрямую к приложению. - Приложение осознанно отдаёт разное: черновик редактору и опубликованную версию читателю, разные варианты по роли или по фича-флагу.
- Разные экземпляры. Выкатка идёт не на все узлы сразу, или файл долетел не во все хранилища. Признак: ответ меняется от запроса к запросу без смены пользователя.
- Ссылка с подписью и параметром версии: у пользователей она разная, а выглядит одинаково, потому что параметры не попали в поле зрения.
Порядок разделения: один и тот же запрос двумя учётными записями в одной сети, затем в приватном окне, затем консольным клиентом с токеном и без него. Сверять не картинку, а хеш тела ответа, длину и ETag.
Где спотыкаются
Сразу пишут в баге, что сломались права доступа. Нарушение доступа тут возможно и это самый опасный исход, но статистически чаще виноват кеш, и неверный диагноз в заголовке отправляет задачу не в ту команду.
Второе: проверяют одним браузером с живой сессией и не сбрасывают кеш. Полученный ответ может быть локальной копией, а не свежим, и разница между пользователями оказывается выдуманной.
Третье: не фиксируют, что именно различается. Без заголовков ответа, размера и хеша тела, точного времени и учётных записей разработчик воспроизвести не сможет, а через сутки кеш протухнет и задача закроется как невоспроизводимая.