Вайбкодинг · 5 октября 2026 г.
Устраните лишние промахи кэша — Vercel CDN и Vary: Cookie
Vercel CDN перестал кэшировать ответы, если заголовок Vary включает Cookie. Как определить такие ответы и что менять на стороне origin, чтобы восстановить кэширование.

Что изменилось и почему это важно
Vercel CDN больше не сохраняет в кэше ответы, когда заголовок Vary возвращает Cookie. Коротко: если origin отвечает с Vary: Cookie, CDN продолжит отдавать ответ посетителю, но не будет сохранять этот ответ для последующих запросов. Такое поведение снижает число «горячих» кэшированных копий и предотвращает накопление множества редко переиспользуемых записей.
Небольшая ремарка по термину: Vary — это HTTP‑заголовок, который подсказывает кэшу, какие заголовки запроса влияют на содержимое ответа. Cookie — тип заголовка с высокой кардинальностью (high‑cardinality): у разных пользователей часто разные значения, поэтому вариант с учётом Cookie может породить множество уникальных записей в кэше, которые редко пересекаются. Vercel принимает это во внимание и не сохраняет такие ответы в общем CDN‑кэше.
Как обнаружить такие ответы и быстро диагностировать проблему
Самый быстрый индикатор — заголовок x‑vercel‑cache в ответе. Если значение равно MISS и в Runtime Logs фигурирует строка vary_key_denied:cookie, значит ответ не был сохранён из‑за Vary: Cookie. Эти два признака — прямой сигнал к тому, что причина промаха в учёте Cookie.
Дальше проверьте заголовок Vary, который возвращает ваш origin. Если origin действительно отправляет Vary: Cookie, это объясняет поведение CDN. Комбинация проверки ответа (x‑vercel‑cache) и логов (vary_key_denied:cookie) позволяет однозначно подтвердить источник промахов, не требуя дополнительных инструментов.
Что делать: варианты действий в зависимости от ситуации
Если ответ не зависит от cookie — удалите Cookie из Vary у origin. После этого Vercel CDN сможет сохранить ответ в кэше при соблюдении остальных правил кэширования и повысится вероятность повторного использования кэшированной копии. Это безопасный путь для статичных ресурсов и для страниц, одинаковых для всех посетителей.
Если ответ зависит от cookie — оставьте Cookie в Vary и добавьте заголовок Cache‑Control: private. Такой режим запрещает сохранение персонализированных ответов в общем CDN‑кэше, при этом поведение сервера остаётся корректным: пользователи получат индивидуальный контент, но он не будет делиться между посетителями через общий кэш.
Важно: удалять Cookie из Vary можно только если действительно одинаковый контент для всех запросов. Неправильное удаление приведёт к возврату одного и того же варианта всем пользователям, что испортит персонализацию. Аналогично, Cache‑Control: private следует применять сознательно — он предотвращает хранение в общем CDN и подходит для персонализированных страниц.
Практический контекст применения
Часто Vary: Cookie попадает в ответы не целенаправленно, а в результате промежуточной логики на origin: фреймворки, middleware или сторонние библиотеке могут добавлять заголовки автоматически. Проверяйте, кто именно формирует заголовки ответа в вашем стеке — изменение предпочтительнее делать на уровне генерации ответа на origin, а не пытаться «поймать» проблему на стороне CDN.
Если у вас микс страниц — часть может быть кэшируема для всех, часть персонализирована — разделите маршруты. Для кэшируемых страниц уберите Cookie из Vary; для персонализированных выставляйте Cache‑Control: private. Это даёт контроль над тем, какие URL реально попадают в общий CDN‑кэш, и какие обслуживаются как приватные.
Ограничения и на что обратить внимание
Это изменение касается именно ситуаций, когда Vary включает Cookie; поведение кэширования для прочих поддерживаемых Vary‑заголовков не изменилось. То есть другие Vary: Accept‑Encoding или Vary: User‑Agent продолжают работать как раньше.
Инструментарий диагностики ограничен тем, что вы видите в ответах и логах: x‑vercel‑cache = MISS и лог vary_key_denied:cookie указывают на проблему, но не говорят, почему origin установил Vary: Cookie. Требуется проверить исходную логику формирования ответа на сервере.
Наконец, изменение не меняет саму логику отдачи контента: ответы по-прежнему отдаются посетителю; просто они не сохраняются в общем CDN‑кэше при наличии Vary: Cookie. Это значит, что на производительности и пропускной способности это влияет только косвенно — через снижение числа кэш‑хитов; конкретные последствия зависят от архитектуры вашего проекта.