Кеширование
ETag: тест с выбором ответа
Шесть вопросов, проходящих через весь юнит. Каждый — это решение, которое ты принимаешь на реальном ревью кэширования: не заголовок для пересказа, а компромисс, который надо взвесить, когда трафик, задержка и согласованность тянут в разные стороны.
Убедись, что можешь связать воедино: что экономит 304, как работает рукопожатие conditional request, strong vs weak валидаторы, ETag vs Last-Modified и поюнитный сбой, который тихо убивает ревалидацию за балансировщиком.
Дашборд опрашивает 8 КБ JSON-конфиг каждые 30 с по каналу с RTT 80 мс. Ты добавил ETag, и каждый неизменившийся опрос теперь возвращает 304. Что ты на самом деле выиграл?
Ты масштабировал API с 1 до 3 подов за round-robin балансировщиком, и ревалидация перестала возвращать 304 — каждый опрос это чистый 200. Какова наиболее вероятная первопричина?
Клиент отправляет в If-None-Match сильный тег "a3f5c901", а текущий валидатор сервера — слабая форма W/"a3f5c901". Вернёт ли сервер 304 и почему?
Когда различие strong vs weak реально меняет поведение, а не остаётся косметическим?
Строка конфига с частыми записями может меняться несколько раз в пределах одной секунды. Коллега предлагает Last-Modified / If-Modified-Since, потому что это дешевле хеширования. В чём риск и какой валидатор точный?
Между двумя деплоями прокси начинает сжимать ответы gzip на лету, и ранее закэшированные сильные валидаторы начинают вести себя неверно. Почему?
Сквозная линия юнита — одна фраза в пяти применениях: 304 экономит байты тела, но не круговой обход. Ревалидация — это рукопожатие версий (отпечаток, эхо, сравнение), и работает оно лишь когда ETag — чистая функция контента, чтобы все узлы совпадали. Сильные валидаторы обещают побайтовую идентичность (обязательна для range-запросов); слабые — семантическую эквивалентность, а If-None-Match сравнивает слабо в любом случае, так что различие в основном кусается на докачке. ETag обходит Last-Modified по точности из-за его секундной слепой зоны. А сбои — поюнитные токены, дрейф mtime, сжатие, меняющее байты, — все сводятся к одному правилу: держи ETag содержательным.