Skip to content
Cache
Visit Cache on GitHub
Set theme to dark (⇧+D)

Default Cache Behavior

Cloudflare respects the origin web server’s cache headers in the following order unless an Edge Cache TTL page rule overrides the headers.

  • Cloudflare does not cache the resource if the Cache-Control header is set to private, no-store, no-cache, or max-age=0 or if there is a cookie in the response.
  • Cloudflare caches the resource in the following scenarios:
    • The Cache-Control header is set to public and the max-age is greater than 0.
    • The Expires header is set to a future date.
  • If both the max-age and an Expires header are set, max-age is used.

For a list of directives and behaviors when Origin Cache-Control is enabled or disabled, see Cache-Control directives.

Default cached file extensions

Cloudflare only caches based on file extension and not by MIME type. The Cloudflare CDN does not cache HTML by default. Additionally, Cloudflare caches a website’s robot.txt.

AVIFBMPEJSJPEGPDFPSTTF
CLASSEOTJPGPICTSVGWEBP
CSSEPSJSPLSSVGZWOFF
CSVGIFMIDPNGSWFWOFF2
DOCICOMIDIPPTTIFXLS
DOCXJAROTFPPTXTIFFXLSX

To cache additional content, see Page Rules to create a rule to cache everything.

Customization options and limitations

Cloudflare’s CDN provides several cache customization options:

Cloudflare limits the upload size (HTTP POST request size) per plan type:

If you require a larger upload, group requests smaller than the upload thresholds or upload the full resource through an unproxied (grey-clouded) DNS record.

Cloudflare cache responses

The output of the CF-Cache-Status header shows whether or not a resource is cached. To investigate cache responses returned by the CF-Cache-Status header, use services like Redbot, webpagetest.org, or a visual tool like Chrome’s Dr. Flare plugin.

StatusDescription
HITThe resource was found in Cloudflare’s cache.
MISSThe resource was not found in Cloudflare’s cache and was served from the origin web server.
NONECloudflare generated response. The resource is not eligible for caching.
EXPIREDThe resource was found in Cloudflare’s cache but was expired and served from the origin web server.
STALEThe resource was served from Cloudflare’s cache but was expired. Cloudflare could not contact the origin to retrieve an updated resource.
BYPASSThe origin server instructed Cloudflare to bypass cache via a Cache-Control header set to no-cache, private, or max-age=0 even though Cloudflare originally preferred to cache the asset. BYPASS is returned when enabling Origin Cache-Control. Cloudflare also sets BYPASS when your origin web server sends cookies in the response header.
REVALIDATEDThe resource is served from Cloudflare’s cache but is stale. The resource was revalidated by either an If-Modified-Since header or an If-None-Match header.
UPDATINGThe resource was served from Cloudflare’s cache and was expired, but the origin web server is updating the resource. UPDATING is typically only seen for very popular cached resources.
DYNAMICCloudflare does not consider the asset eligible to cache and your Cloudflare settings do not explicitly instruct Cloudflare to cache the asset. Instead, the asset was requested from the origin web server. Use Page Rules to implement custom caching options.