← Back to Blog

You're paying for a CDN. Your cache hit ratio says it's not working.

You're paying for a CDN. Your cache hit ratio says it's not working.

A CDN is supposed to serve cached copies of your pages from edge servers close to your visitors. That's the pitch. In practice, many sites route through a CDN that caches almost nothing.

The symptoms are subtle. Your site loads fine. Your hosting bill seems normal. But every request is hitting your origin server because the CDN can't cache your responses. Maybe your Cache-Control headers are missing. Maybe they say no-cache or private. Maybe your application sets cookies on every response, which most CDNs treat as a signal not to cache.

How to tell if your CDN is actually working

Response headers don't lie. Every major CDN adds headers that tell you exactly what happened:

Cache-Status (the standardized header, RFC 9211) tells you whether the response was a hit, miss, or bypass, and why. Cloudflare, Fastly, and Akamai all use some version of this.

CF-Cache-Status is Cloudflare's proprietary version. HIT means the edge served it. MISS means the edge fetched from origin. DYNAMIC means Cloudflare decided not to cache it at all.

X-Cache is what AWS CloudFront and Varnish use. Hit from cloudfront vs Miss from cloudfront.

Age tells you how many seconds ago the edge cached this response. An Age of 0 on every request means you're getting constant cache misses.

If you're seeing MISS or DYNAMIC on pages that should be cacheable, your CDN is functioning as an expensive reverse proxy. You're paying for edge distribution and getting none of the speed benefit.

Common reasons caches miss

Missing Cache-Control. If your server doesn't send a Cache-Control header, most CDNs won't cache the response. They need explicit permission.

Set-Cookie on cacheable pages. If your application framework sends a session cookie on every response, most CDNs skip caching entirely. This is the most common accidental cache-buster.

Vary: * or overly broad Vary. A Vary: * header tells caches that every request is unique. Nothing gets cached. Even Vary: Cookie effectively disables caching for logged-in traffic.

Query string variations. If your analytics adds a ?utm_source=... to every URL, each combination gets cached separately. Your CDN cache fills up with thousands of nearly identical copies.

What the tool does

The Edge Cache Effectiveness Probe sends requests to your URLs and reads the cache-related response headers. It tells you the cache status, the TTL, the age of the cached copy, and whether your origin is being hit when it shouldn't be.

For a list of URLs, it calculates your aggregate cache hit ratio, which is the number that actually matters for performance and cost.

If you're standing up CDN-backed sites for clients and want to make sure the caching layer is doing its job, The $20 Dollar Agency covers the headers to get right before launch.

Fact-check notes and sources

  • RFC 9211 "The Cache-Status HTTP Response Header Field": IETF RFC 9211
  • Cloudflare CF-Cache-Status values: Cloudflare docs
  • Set-Cookie preventing CDN caching: documented in Cloudflare, Fastly, and Akamai documentation as default behavior
  • Chrome cache partitioning (2020) means CDN cross-site caching no longer helps end users: Chromium blog

Related reading

This post is informational, not hosting or CDN-consulting advice. Mentions of Cloudflare, AWS CloudFront, Fastly, and Akamai are nominative fair use. No affiliation is implied.

← Back to Blog

Accessibility Options

Text Size
High Contrast
Reduce Motion
Reading Guide
Link Highlighting
Accessibility Statement

J.A. Watte is committed to ensuring digital accessibility for people with disabilities. This site conforms to WCAG 2.1 and 2.2 Level AA guidelines.

Measures Taken

  • Semantic HTML with proper heading hierarchy
  • ARIA labels and roles for interactive components
  • Color contrast ratios meeting WCAG AA (4.5:1)
  • Full keyboard navigation support
  • Skip navigation link
  • Visible focus indicators (3:1 contrast)
  • 44px minimum touch/click targets
  • Dark/light theme with system preference detection
  • Responsive design for all devices
  • Reduced motion support (CSS + toggle)
  • Text size customization (14px–20px)
  • Print stylesheet

Feedback

Contact: jwatte.com/contact

Full Accessibility StatementPrivacy Policy

Last updated: April 2026