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.

See also

Last updated: March 6, 2026