INTEGRITY Cloudflare Docs

Cloudflare cache responses

The CF-Cache-Status header output indicates whether a resource is cached or not. To investigate cache responses returned by this header, use services like Redbot, webpagetest.org, or a visual tool like Cloudflare Optics plugin.

Below you can find a comprehensive breakdown of Cloudflare's cache response statuses.

HIT

The resource was found in Cloudflare's cache.

MISS

The response is eligible for cache but was not present in Cloudflare's cache at request time, so it was served from the origin web server. Responses that Cloudflare chooses not to cache return BYPASS instead of MISS.

NONE/UNKNOWN

Cloudflare generated a response that denotes the asset is not eligible for caching. This may have happened because:

EXPIRED

The resource was found in Cloudflare's cache but was expired and served from the origin web server.

STALE

The resource was served from Cloudflare's cache but was expired. Cloudflare could not contact the origin web server to retrieve an updated resource.

BYPASS

Cloudflare considered the asset eligible for cache at request time — either because it matches the default cached file extensions, or because a Cache Rule enabled caching for it — but the origin response was ultimately not cacheable.

Common reasons the origin response is treated as not cacheable include:

BYPASS means the decision not to cache was made at response time — the request was initially eligible for caching, but the origin response or response headers instructed Cloudflare not to cache. For example, a Cache Rule that sets "cache": true enables caching at request time, but if the origin returns Cache-Control: no-store, the response will be BYPASS.

If you expected a URL to be cached but see BYPASS, refer to Investigate uncached responses for a step-by-step diagnostic.

REVALIDATED

The origin confirmed the cached resource was unchanged via a conditional request (If-Modified-Since or If-None-Match), and the response is served from Cloudflare's cache. This status reflects the synchronous validation path — the request waits for the origin to respond before being served.

With asynchronous stale-while-revalidate, most revalidations now return UPDATING or HIT instead. REVALIDATED is seen in the following situations: stale-while-revalidate is not set; or directives like must-revalidate or no-cache (with Origin Cache Control enabled) prevent stale content from being served.

UPDATING

The resource was expired but served from Cloudflare's cache while the origin updates it in the background. UPDATING is the expected status during asynchronous stale-while-revalidate revalidation — all requests during the revalidation window receive UPDATING or HIT rather than waiting for the origin.

DYNAMIC

Cloudflare determined at request time that the asset is not eligible for cache, so the request went to the origin web server without a cache lookup.

This typically happens when:

Use Cache Rules to change what content Cloudflare caches. Once the request is treated as eligible for cache, the CF-Cache-Status header will reflect the response-time cache decision (HIT, MISS, EXPIRED, REVALIDATED, BYPASS, and so on) — refer to BYPASS for the case where the origin response is ultimately not cacheable.

If you expected the request to be eligible for cache but see DYNAMIC, refer to Investigate uncached responses.