Cf-Cache-Status
The HTTP Cf-Cache-Status response header is an unofficial, Cloudflare-specific header indicating how Cloudflare 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. Responses Cloudflare chooses not
to store return BYPASS instead of MISS.
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 Cloudflare decided at response
time to skip caching. Responses with
Cache-Control no-store or private
directives or Vary: * always produce BYPASS. A
Set-Cookie header produces BYPASS
under specific configurations, and cache rules set to
ignore or strip the header keep the response cacheable.
Directives like
no-cache, max-age=0, and s-maxage=0 produce
BYPASS only when Origin Cache Control is disabled.
With Origin Cache Control enabled, these directives
produce REVALIDATED or EXPIRED instead. An
Authorization request header produces
BYPASS when Origin Cache Control is enabled and the
response lacks public, s-maxage, or
must-revalidate.
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 Cloudflare decided at request
time 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. DYNAMIC reflects a request-time decision,
while BYPASS reflects a response-time decision driven
by headers the origin returned.
NONE/UNKNOWN
The NONE/UNKNOWN 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