HTML на крае, который игнорировал cookie локали
Cloudflare закэшировал первый HTML для URL. Посетитель de получил разметку ru. Vue гидрировал чужой язык и уходил в навигацию.
Origin был nginx, php, Vue SSR, MySQL. Cloudflare стоял спереди для TLS и статики. Кто-то включил Cache Everything на HTML. Ключ кэша был URL. Локаль жила в cookie. Первый краулер просил русский. Германия минуту получала этот документ.
Гидратация видела lang=ru в HTML и предпочтение de на клиенте. Страница мигала. Вошедшие с auth_token иногда получали публичный фрагмент, потому что край эту cookie не обходил.
Проблема была в HTML на крае с ключом только по пути. Посетитель de получал разметку ru. Вошедший мог получить публичный фрагмент. Нужна локаль в ключе или без HTML-кэша, и обход по auth_token.
Что краю можно кэшировать
Статика на Cloudflare остаётся. HTML либо обходит кэш, либо ключ включает локаль, а запросы с auth_token край пропускают. У nginx уже был двухсекундный microcache с этим правилом. Дублировать HTML-кэш без ключа значит биться с origin.
DNS без угадывания страниц
Cloudflare по-прежнему DNS и TLS. Инцидент был HTML. Листинг каталога это SSR с локалью. Его надо трактовать как cookie API, не как PNG. Origin остаётся источником документа. Край имеет право ошибаться минуту, если ключ только путь.
Какой опыт из этого
Cache Everything на SSR HTML это чужой язык, пока ключ не включает локаль. Правило для PNG это не правило для страницы.
auth_token должен обходить край. Публичный HTML в слоте вошедшего это тот же класс утечки, что кейс microcache nginx на этом сайте.
У origin уже был двухсекундный microcache с верным ключом. Второй HTML-кэш без этого ключа его ломает.
