Introducing Cache Inspector
Recent content
-
5 hours 38 minutes ago
-
5 hours 49 minutes ago
-
7 hours 38 minutes ago
-
21 hours 32 minutes ago
-
3 days 1 hour ago
-
3 days 1 hour ago
-
6 days 4 hours ago
-
1 week ago
-
1 week 5 days ago
-
1 week 6 days ago
Cache Inspector
Cache Inspector
URL:
https://jamestarleton.com/node/139● HIT● MISS● WARN● INFO● N/A
📋 Equivalent cURL command (Akamai debug probe)
curl -sI "https://jamestarleton.com/node/139" -H "Pragma: akamai-x-cache-on, akamai-x-cache-remote-on, akamai-x-check-cacheable, akamai-x-get-cache-key, akamai-x-get-extracted-origin-url, akamai-x-get-true-cache-key, akamai-x-get-request-id" -H "X-Cache-Inspector: true"
Browser CacheWARNℹ️›
🔬 How This Layer Is Detected
Inferred from Cache-Control, Expires, ETag, Last-Modified, and Pragma response headers.
✅ HIT: HIT: Browser serves the page from its local disk/memory cache without any network request.
❌ MISS: MISS: no-store, max-age=0, no-cache, or absence of caching headers forces a fresh request.
📊 Indicators
no-cacheBrowser must revalidate with the server on every request before serving from cache.
privateOnly the end-user's browser may cache this; CDNs and proxies must not.
must-revalidateOnce stale, the cache must not serve the response without revalidating with the origin.
No validatorsNo ETag or Last-Modified — browser cannot do conditional requests.
ExpiresExpires: Sun, 19 Nov 1978 05:00:00 GMT. Legacy header; Cache-Control takes precedence if both are present.
📨 Relevant Headers
| cache-control | must-revalidate, no-cache, private |
| expires | Sun, 19 Nov 1978 05:00:00 GMT |
| etag | (not set) |
| last-modified | (not set) |
| pragma | (not set) |
CDN Cache (Akamai)?ℹ️›
🔬 How This Layer Is Detected
Detected via X-Cache, X-Cache-Remote, X-Check-Cacheable, X-Cache-Key, X-True-Cache-Key, Via, and Age headers returned by Akamai debug Pragma headers.
✅ HIT: HIT: X-Cache contains "HIT" — the edge node served the response without contacting origin.
❌ MISS: MISS: X-Cache contains "MISS" — Akamai fetched from origin. First request, expired TTL, or not cacheable.
📊 Indicators
Akamai not detectedNo Akamai-specific headers found. Either Akamai is not in the stack, or the pragma debug headers were stripped.
📨 Relevant Headers
| x-cache | (not present) |
| x-cache-remote | (not present) |
| x-check-cacheable | (not present) |
| x-cache-key | (not present) |
| x-true-cache-key | (not present) |
| x-akamai-request-id | (not present) |
| age | (not present) |
| via | (not present) |
Reverse Proxy Cache (Varnish / nginx)?ℹ️›
🔬 How This Layer Is Detected
Detected via X-Varnish, X-Cache, X-Cache-Hits, X-Served-By, Age, and Via headers.
✅ HIT: HIT: X-Varnish has two IDs, X-Cache-Hits > 0, X-Cache = HIT, or Age > 0.
❌ MISS: MISS: X-Varnish has only one ID, X-Cache = MISS, Age = 0, or no proxy headers at all.
📊 Indicators
Reverse proxy not detectedNo Varnish/proxy-specific headers found. Either no reverse proxy is in the stack, or it strips identifying headers.
📨 Relevant Headers
| x-varnish | (not present) |
| x-cache | (not present) |
| x-cache-hits | (not present) |
| x-served-by | (not present) |
| age | (not present) |
| via | (not present) |
Internal Page Cache (Drupal Core)MISSℹ️›
🔬 How This Layer Is Detected
Detected via X-Drupal-Cache response header (set by the Internal Page Cache module). Only present for anonymous requests.
✅ HIT: HIT: X-Drupal-Cache: HIT — the full HTML was served from the page cache table in the database.
❌ MISS: MISS: X-Drupal-Cache: MISS — first visit, cache cleared, or the page was invalidated via cache tags.
📊 Indicators
X-Drupal-Cache: MISSInternal Page Cache MISS. Drupal built the page fresh and has now stored it. Subsequent anonymous requests will hit.
X-Generator: Drupal 11 (https://www.drupal.org)Confirms Drupal processed this request: Drupal 11 (https://www.drupal.org)
📨 Relevant Headers
| x-drupal-cache | MISS |
| x-generator | Drupal 11 (https://www.drupal.org) |
Dynamic Page Cache (Drupal Core)MISSℹ️›
🔬 How This Layer Is Detected
Detected via X-Drupal-Dynamic-Cache, X-Drupal-Cache-Tags, X-Drupal-Cache-Contexts, and X-Drupal-Cache-Max-Age headers.
✅ HIT: HIT: X-Drupal-Dynamic-Cache: HIT — Drupal assembled the response from cached render arrays, only re-rendering lazy-builder placeholders.
❌ MISS: MISS: X-Drupal-Dynamic-Cache: MISS — first request for this context combination, or a cache tag was invalidated (e.g. a node was saved).
📊 Indicators
X-Drupal-Dynamic-Cache: MISSDynamic Page Cache MISS. Drupal re-rendered the page, generated cache metadata, and stored it. Subsequent requests will hit.
📨 Relevant Headers
| x-drupal-dynamic-cache | MISS |
| x-drupal-cache-tags | (not present) |
| x-drupal-cache-contexts | (not present) |
| x-drupal-cache-max-age | (not present) |
Render Cache (Drupal Core)INFOℹ️›
🔬 How This Layer Is Detected
Not directly visible in HTTP headers. Infer from Dynamic Page Cache status, Twig debug comments, or the WebProfiler module.
✅ HIT: HIT (internal): Drupal finds the pre-built render array in the cache bin and skips the build/render cycle for that element.
❌ MISS: MISS (internal): First render, or a cache tag tied to this element was invalidated (e.g. editing the block).
📊 Indicators
No direct HTTP headerThe Render Cache is part of Drupal's internal rendering pipeline and does not emit its own HTTP header. Its behaviour can be observed via Drupal's Twig debug output, the WebProfiler module, or by enabling Drupal's cache debug logging.
Drupal WebProfilerInstall the WebProfiler module (Devel package) for a toolbar showing per-component render cache hit/miss rates on this page.
Twig debugEnable twig.config.debug in services.yml to see <!-- CACHE-HIT / CACHE-MISS --> comments in page source for every render element.
Data Caches (Cache Bins)INFOℹ️›
🔬 How This Layer Is Detected
Not visible in HTTP headers. Use Drush, the WebProfiler module, or the Drupal cache debug log to inspect bin activity.
✅ HIT: HIT (internal): Drupal finds a valid (non-expired, non-invalidated) cache entry and skips re-computing the data.
❌ MISS: MISS (internal): Cache bin is empty, the entry expired, or a cache tag was invalidated.
📊 Indicators
Internal to DrupalData / cache bin caches are not observable via HTTP headers. They operate entirely within PHP/Drupal and are used to store things like config, translated strings, menu trees, discovered plugins, and entity data.
cache.bootstrapEarly bootstrap data: route definitions, container, trusted host patterns.
cache.configConfiguration objects (system.site, field.field.*, etc.).
cache.dataGeneral-purpose data storage used by contrib/custom modules.
cache.defaultDefault fallback bin.
cache.discoveryPlugin discovery results (annotated classes, YAML services).
cache.dynamic_page_cacheStores Dynamic Page Cache responses.
cache.entitySerialised entity objects and field data.
cache.menuComputed menu link trees.
cache.migrateMigrate module intermediate data.
cache.pageFull HTML pages stored by the Internal Page Cache module.
cache.renderRender array fragments cached by the Render Cache system.
cache.restREST API response caches.
cache.staticPer-request (PHP static) in-memory cache — fastest, but dies when the request ends.
cache.toolbarAdmin toolbar rendered HTML.
Inspect via DrushRun: drush php-eval "\Drupal::service('cache.render')->invalidateAll();" to clear the render bin, or use drush cr to wipe all bins.
🗂 All Response Headers (raw probe)
| Header | Value |
|---|---|
| date | Wed, 18 Mar 2026 20:55:54 GMT |
| server | Apache/2.4.58 (Ubuntu) |
| cache-control | must-revalidate, no-cache, private |
| x-drupal-dynamic-cache | MISS |
| content-language | en |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| expires | Sun, 19 Nov 1978 05:00:00 GMT |
| x-generator | Drupal 11 (https://www.drupal.org) |
| content-security-policy | report-uri /report-csp-violation; upgrade-insecure-requests |
| x-content-security-policy | report-uri /report-csp-violation; upgrade-insecure-requests |
| x-webkit-csp | report-uri /report-csp-violation; upgrade-insecure-requests |
| x-xss-protection | 1 |
| strict-transport-security | max-age=2592000; includeSubDomains |
| from-origin | same |
| referrer-policy | no-referrer-when-downgrade |
| feature-policy | camera=self, microphone=self |
| x-drupal-cache | MISS |
| content-type | text/html; charset=UTF-8 |