ETag Inspect

Analyze cache-related headers across layers. No input is sent to a server. Use it for first-pass revalidation and CDN mismatch troubleshooting.

Status

Runs in your browser. No input is sent to a server. Use this as a first-pass diagnostic step.

How to use

Paste ETag/If-None-Match and click “Parse”. It lists strong/weak tags. If you paste both ETag and If-None-Match, it also shows weak/strong match checks.

Notes (this tool)

  • Accepts ETag: / If-None-Match: header lines (multi-line paste is OK).

About this page

What does this tool do?

Parse ETag/If-None-Match and show strong/weak tags. If you paste both ETag and If-None-Match, it also shows weak/strong match checks.

Useful for debugging cache issues (unexpected/missing 304).

ETag basics

  • ETag is a resource version identifier.
  • If-None-Match is used for cache validation.
  • Weak ETags (W/) indicate semantic equivalence.

Syntax (how to read)

ETag is usually a quoted value; weak ETags are prefixed with W/. If-None-Match is a comma-separated list of ETags or *.

  • ETag: "abc123"
  • ETag: W/"abc123"
  • If-None-Match: "a", "b", W/"c"
  • If-None-Match: *

304 (Not Modified) and ETag

ETag is a key for cache validation. Clients send If-None-Match; if the server considers it a match, it can respond with 304 and skip the body.

  • No 304: ETag changes/missing, or conditional request isn’t sent
  • Too many 304: ETag not updated or cache design differs from intent

Cache-Control and revalidation

ETag is used during revalidation. Depending on your Cache-Control policy, revalidation may happen too often—or not at all.

  • Short max-age: more revalidation (If-None-Match sent more often)
  • no-cache: revalidate every time (body may be skipped with 304)
  • immutable: reduces revalidation (pairs well with hash-in-filename assets)

To narrow down issues, check not only ETag matching but also Cache-Control / Expires / Vary.

Strong vs weak ETag

Strong ETags represent byte-for-byte identity; weak ETags represent semantic equivalence. Misuse can cause stale content or unnecessary revalidation.

  • Compression/transformations may change ETag
  • Behind CDNs, origin and edge ETags may differ

Vary: Accept-Encoding and ETag

Even for the same URL, compression (gzip/br) changes the response bytes. With strong ETags, different encodings can look like different resources.

  • Without Vary: Accept-Encoding, caches may mix compressed/uncompressed variants
  • With edge transforms (image optimization/minify), origin and edge ETags may differ

Common issues behind CDN/proxies

CDNs/reverse proxies may change the meaning of ETag through compression, optimization, or cache rewrites. It matters who generated the ETag (origin vs edge).

  • An origin ETag may be replaced/removed at the edge
  • If servers generate different ETags, ETag may change without content changes

Typical use cases

  • No 304; always 200
  • Over-caching; updates not reflected
  • ETag changes behind proxy/CDN

Privacy/security notes

ETag is for cache validation, but depending on implementation it can behave like a user identifier, so privacy considerations matter.

  • Per-user ETags make shared caching and debugging harder
  • Do not embed sensitive data in ETags (they often end up in logs/monitoring)

Debugging workflow (recommended)

  • Use Response Headers Parser to check ETag / Cache-Control
  • Check If-None-Match via Request Headers Parser
  • Split ETags here to organize strong/weak and multiple values

Troubleshooting checklist

  • ETag changes every time: suspect multi-server differences, build variance, compression, transforms, or CDN rewrites
  • If-None-Match not sent: check Cache-Control policy, DevTools “Disable cache”, and Service Worker
  • UI not updated despite 304: other cache layers (SW/memory) or stale referenced assets
  • Cache-Control Inspect
  • Response Headers Parser / Request Headers Parser

Recommendations (practical)

  • Always include ETag or Last-Modified for APIs/HTML
  • When supporting Range, pair with If-Range
  • If ETag changes every time, inspect generation and intermediaries

What this tool does

  • Split ETag/If-None-Match values (header lines and multi-line paste supported)
  • Identify weak/strong tags
  • Check ETag vs If-None-Match matches (weak/strong comparison)

Note: If-None-Match evaluation depends on HTTP method, etc. This tool shows weak/strong comparison results as guidance.

Operational notes

  • Cache behavior changes across browser, CDN, and proxy layers, so compare captures from the same observation point.
  • Header-only diagnosis may be insufficient. Also review application cache invalidation strategy and key design.

Referenced specs

  • RFC 9110 (HTTP Semantics)
  • RFC 9111 (HTTP Caching)
  • MDN: ETag / If-None-Match

FAQ

What if ETag is missing?

Conditional validation may not work and you may always get 200 bodies (Last-Modified may be used instead).

What does * mean in If-None-Match?

It is a special value meaning “match anything”, often used for existence checks.

References

  1. RFC 9110
  2. MDN: ETag
  3. MDN: If-None-Match
  4. RFC 9111
  5. MDN: HTTP caching

These links are generated from site_map rules in recommended diagnostic order.

  1. How to Diagnose Missing 304 Responses — Trace ETag/Last-Modified and If-* round trips to isolate missing 304 behavior
  2. Vary Inspect — Parse Vary and visualize cache variation keys
  3. Cache-Control Inspect — Parse and interpret Cache-Control directives
  4. Last-Modified Inspect — Parse Last-Modified and If-Modified-Since
  5. Cache Control Overview — Summarize how to use Cache-Control/Pragma/Expires together
  6. Cache Validator Overview — Summarize relationships among ETag/Last-Modified validators
  7. ETag Builder — Build ETag values for testing and operations
  8. If-None-Match Inspect — Parse If-None-Match and inspect revalidation conditions

Cache Validators

Connect ETag/Last-Modified and If-* to judge revalidation flow