Cf-Cache-Status
The HTTP Cf-Cache-Status response header is an unofficial, Cloudflare-specific header indicating how the CDN handled caching for a given request.
Usage
The Cf-Cache-Status header is added by Cloudflare to every response served through its network. The value tells whether the response was served from cache, fetched from the origin, or skipped caching entirely.
Understanding these values is essential for verifying caching behavior, diagnosing performance issues, and confirming cache rules work as expected. The header works alongside other cache-related headers like Cache-Control and Age to give a complete picture of how a resource was delivered.
Directives
HIT
The HIT value means the resource was found in
Cloudflare's cache and served directly without
contacting the origin server.
MISS
The MISS value means the resource was not in
Cloudflare's cache. The request was forwarded to the
origin server, and the response is now stored in cache
for future requests.
EXPIRED
The EXPIRED value means the resource was in the cache
but had exceeded its time-to-live. Cloudflare fetched a
fresh copy from the origin server.
STALE
The STALE value means the cached resource was expired
and served as-is because Cloudflare was unable to reach
the origin server to retrieve an updated copy.
BYPASS
The BYPASS value means caching was skipped for the
request. This happens when the origin server sends
Cache-Control directives like
no-cache, private, or max-age=0, when a
Set-Cookie header is present in the
response, or when an Authorization
header is present in the request.
REVALIDATED
The REVALIDATED value means the cached resource was
confirmed as still valid through a
conditional request to the
origin. The origin responded the content was unchanged,
and the cached version was served.
UPDATING
The UPDATING value means the cached resource was
expired but served from cache while Cloudflare fetches
a fresh copy from the origin in the background. This
asynchronous revalidation keeps response times fast for
popular resources.
DYNAMIC
The DYNAMIC value means the resource is not eligible
for caching based on default behavior and current
configuration. Every request for this resource goes
directly to the origin server.
NONE
The NONE value means Cloudflare generated the
response internally without reaching the origin server
or cache. This occurs when a Cloudflare Worker produces
a response, when WAF rules block a request, or when a
redirect fires before cache logic runs.
Example
A HIT means Cloudflare already had a copy of the
resource stored at the edge. The response was served
directly from Cloudflare without contacting the origin
server, resulting in faster delivery.
Cf-Cache-Status: HIT
A DYNAMIC means the resource is not eligible for
caching. This is common for API responses, personalized
pages, and content where the
Cache-Control header signals the
response is private or varies per request. Every
request for a DYNAMIC resource goes straight to the
origin.
Cf-Cache-Status: DYNAMIC
An EXPIRED means Cloudflare had a cached copy, but
the resource's time-to-live had passed. Cloudflare
fetched a fresh version from the origin server and
updated its cache.
Cf-Cache-Status: EXPIRED
A MISS means Cloudflare did not have the resource in
cache at all. This is typical for the first request to
a resource after a cache purge or when a resource has
never been requested through a particular edge data
center. The response is fetched from the origin and
cached for future requests.
Cf-Cache-Status: MISS
Takeaway
The Cf-Cache-Status response header reveals how Cloudflare handled caching for each request. The status values cover the full lifecycle from cache hits and misses to revalidation, expiration, and bypass scenarios.