X-Vercel-Cache
The HTTP X-Vercel-Cache response header is an unofficial HTTP header indicating the cache status of a response served through Vercel's CDN.
Note
The X- prefix for non-standard headers is
deprecated per RFC 6648.
Usage
Vercel adds the X-Vercel-Cache header to every response
served through its edge network. The value describes
whether the response came from cache, from the origin, or
from static storage. The header applies to static assets
and responses where a Cache-Control
header enables CDN caching through directives like
s-maxage.
For dynamic routes using Vercel's Runtime Cache, the header
often shows MISS even when data is served from the
runtime layer. Server-side logging or custom response
headers provide more accurate signals for runtime cache
behavior.
Values
HIT
The HIT value means the response was found in Vercel's
edge cache and served directly without contacting the
origin server.
MISS
The MISS value means the response was not found in
Vercel's edge cache. The request was forwarded to the
origin server, and the response is now eligible for caching
on future requests.
STALE
The STALE value means the cached response was no longer
fresh, but Vercel served the stale copy to the client
while fetching an updated version from the origin in the
background. This occurs when a stale-while-revalidate
directive is present in the Cache-Control header, or when
Incremental Static Regeneration (ISR) triggers a
background revalidation.
PRERENDER
The PRERENDER value means the response was served from
static storage. In Next.js, this occurs for pages generated
at build time or on-demand through getStaticPaths with
fallback: true. Pages using fallback: "blocking" do
not return PRERENDER.
REVALIDATED
The REVALIDATED value means the cached entry was
explicitly invalidated (via revalidatePath(),
revalidateTag(), or a dashboard purge) and the
response was fetched fresh from the origin in the
foreground before being served to the client.
BYPASS
The BYPASS value means caching was skipped entirely for
the request. This happens when the origin response includes
Cache-Control directives like no-cache, private, or
no-store, or when the request does not meet Vercel's
cacheable response criteria.
Example
A HIT means Vercel already had a cached copy of the
resource at the edge. The response was served directly
without reaching the origin, resulting in faster delivery.
X-Vercel-Cache: HIT
A MISS means the resource was not in the edge cache.
This is common on the first request to a resource after
deployment, after a cache purge, or when a resource has
never been requested through a given edge region.
X-Vercel-Cache: MISS
A PRERENDER means the page was pre-generated and served
from static storage. This appears on statically generated
pages in Next.js frameworks using ISR or static generation
with dynamic paths.
X-Vercel-Cache: PRERENDER
A STALE means a cached copy existed but was expired. The
stale version was served immediately while Vercel fetched a
fresh copy from the origin in the background, keeping
response times fast for the current visitor.
X-Vercel-Cache: STALE
Takeaway
The X-Vercel-Cache response header reveals how Vercel's CDN handled caching for each request. The status values cover the full lifecycle from cache hits and prerendered pages to background revalidation and origin fetches.