<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/vercel-cdn-no-longer-caches-responses-with-vary-cookie-ytualdjfx" -->

---
title: Vercel CDN no longer caches responses with Vary: Cookie
description: Vercel's CDN has stopped storing origin responses whose Vary header includes Cookie, since cookies often carry visitor-specific values that would bloat the...
canonical: https://daily.dev/posts/vercel-cdn-no-longer-caches-responses-with-vary-cookie-ytualdjfx
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Vercel CDN no longer caches responses with Vary: Cookie | daily.dev
og:description: Vercel's CDN has stopped storing origin responses whose Vary header includes Cookie, since cookies often carry visitor-specific values that would bloat the...
og:url: https://daily.dev/posts/vercel-cdn-no-longer-caches-responses-with-vary-cookie-ytualdjfx
og:image: https://api.daily.dev/og/posts/YtUALdjFx.png
og:image:alt: Vercel CDN no longer caches responses with Vary: Cookie
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Vercel CDN no longer caches responses with Vary: Cookie

**[Vercel](https://daily.dev/sources/vercel)** · 1 min read · 4 upvotes · 1 comments

## Summary

Vercel's CDN has stopped storing origin responses whose Vary header includes Cookie, since cookies often carry visitor-specific values that would bloat the cache with entries rarely reused. Such responses are still served but marked MISS in x-vercel-cache, with Runtime Logs showing vary_key_denied:cookie as the reason. Developers whose responses don't actually vary by cookie should remove Cookie from Vary; those whose responses do depend on cookies should keep Vary: Cookie and add Cache-Control: private to avoid storing personalized content in the shared cache. Caching for other supported Vary headers is unaffected.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://vercel.com/changelog/vary-cookie-responses-no-longer-cached>

## Questions this post answers

### Why is my Vercel deployment showing x-vercel-cache: MISS with vary_key_denied:cookie in the logs?

Vercel CDN no longer caches responses whose Vary header includes Cookie, because cookie values are often visitor-specific and would create cache entries that are rarely reused. The response still serves normally but is not stored, and Runtime Logs report the reason as vary_key_denied:cookie. Removing Cookie from Vary allows caching again if the response doesn't actually depend on cookies.

_daily.dev surfaces changelog updates like this so caching regressions don't slip into production unnoticed._

### How do I fix a Vercel route that should be cached but returns Vary: Cookie?

If the response content does not actually change based on cookies, remove Cookie from the Vary header returned by the origin so Vercel CDN can cache it, provided other caching requirements are met. If the response genuinely varies per cookie, keep Cookie in Vary but add Cache-Control: private so personalized content is not stored in the shared CDN cache.

_Developers tuning Vercel caching rules can track behavior changes like this one on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@pdfopsdev** · 0 upvotes

> this bit a lot of people who set Vary: Cookie defensively just in case, without realizing they were nuking their own cache hit rate for everyone. Cache-Control: private is the right fix but it's easy to forget that's a per-response opt-in, not something you set once globally.

## Similar posts on daily.dev

- [Cloudflare Adds Configurable HTTP Vary Header Support to Prevent Cache Thrashing](https://daily.dev/posts/cloudflare-adds-configurable-http-vary-header-support-to-prevent-cache-thrashing-xmx82ghux) · InfoQ · 0 upvotes · 0 comments
- [Vercel CDN now respects cache-control headers from external origins by default](https://daily.dev/posts/vercel-cdn-now-respects-cache-control-headers-from-external-origins-by-default-8plwagtqs) · Vercel · 1 upvotes · 0 comments
- [We just shipped support for the ugliest part of HTTP: Vary](https://daily.dev/posts/we-just-shipped-support-for-the-ugliest-part-of-http-vary-3se6wpo1c) · Cloudflare · 1 upvotes · 0 comments
- [Better Browser Caching with No-Vary-Search – Frontend Masters Blog](https://daily.dev/posts/better-browser-caching-with-no-vary-search-frontend-masters-blog-hmvz99cjh) · Frontend Masters · 0 upvotes · 0 comments
- [Runtime logs now show cache reasons](https://daily.dev/posts/runtime-logs-now-show-cache-reasons-9d6ak3ce8) · Vercel · 4 upvotes · 0 comments

---

Tags: [#vercel](https://daily.dev/tags/vercel)

[View this post on daily.dev](https://daily.dev/posts/vercel-cdn-no-longer-caches-responses-with-vary-cookie-ytualdjfx)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Vercel CDN no longer caches responses with Vary: Cookie","url":"https://daily.dev/posts/vercel-cdn-no-longer-caches-responses-with-vary-cookie-ytualdjfx","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/vercel-cdn-no-longer-caches-responses-with-vary-cookie-ytualdjfx"},"datePublished":"2026-09-30T19:40:10.003Z","dateModified":"2026-09-30T19:40:28.583Z","description":"Vercel's CDN has stopped storing origin responses whose Vary header includes Cookie, since cookies often carry visitor-specific values that would bloat the...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/46e89938207c6d17723991ffb41e76a5?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/46e89938207c6d17723991ffb41e76a5?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Vercel","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Vercel","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/04cca7235cf84db092f24b7ba427b3e1","url":"https://daily.dev/sources/vercel"},"commentCount":1,"discussionUrl":"https://daily.dev/posts/vercel-cdn-no-longer-caches-responses-with-vary-cookie-ytualdjfx","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":4},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":1}],"keywords":"vercel","timeRequired":"PT1M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Vercel","item":"https://daily.dev/sources/vercel"},{"@type":"ListItem","position":3,"name":"Vercel CDN no longer caches responses with Vary: Cookie"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/vercel-cdn-no-longer-caches-responses-with-vary-cookie-ytualdjfx","comment":[{"@type":"Comment","text":"this bit a lot of people who set Vary: Cookie defensively just in case, without realizing they were nuking their own cache hit rate for everyone. Cache-Control: private is the right fix but it’s easy to forget that’s a per-response opt-in, not something you set once globally.","datePublished":"2026-10-01T18:13:52.090Z","url":"https://daily.dev/posts/YtUALdjFx#c-vsHj5zNbi","author":{"@type":"Person","name":"PDFops","url":"https://daily.dev/pdfopsdev","image":"https://media.daily.dev/image/upload/s---8isRBKc--/f_auto/v1782922291/avatars/avatar_orjMeK8QKaaVZwGq7ScPz?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/vercel-cdn-no-longer-caches-responses-with-vary-cookie-ytualdjfx#faq","mainEntity":[{"@type":"Question","name":"Why is my Vercel deployment showing x-vercel-cache: MISS with vary_key_denied:cookie in the logs?","acceptedAnswer":{"@type":"Answer","text":"Vercel CDN no longer caches responses whose Vary header includes Cookie, because cookie values are often visitor-specific and would create cache entries that are rarely reused. The response still serves normally but is not stored, and Runtime Logs report the reason as vary_key_denied:cookie. Removing Cookie from Vary allows caching again if the response doesn't actually depend on cookies. daily.dev surfaces changelog updates like this so caching regressions don't slip into production unnoticed."}},{"@type":"Question","name":"How do I fix a Vercel route that should be cached but returns Vary: Cookie?","acceptedAnswer":{"@type":"Answer","text":"If the response content does not actually change based on cookies, remove Cookie from the Vary header returned by the origin so Vercel CDN can cache it, provided other caching requirements are met. If the response genuinely varies per cookie, keep Cookie in Vary but add Cache-Control: private so personalized content is not stored in the shared CDN cache. Developers tuning Vercel caching rules can track behavior changes like this one on daily.dev."}}]}
```

