Implementation experience: Dictionary TTL for dynamic content delta compression (RFC 9842)

Hi all,

I wanted to share implementation experience relevant to decoupling
dictionary and cache lifetimes in Compression Dictionary Transport (RFC
9842).

This was discussed during standardization (httpwg/http-extensions#2649) and
scoped out. Now that CDT has shipped and the Dictionary TTL extension is
available for developer testing in Chromium (
https://groups.google.com/a/chromium.org/g/blink-dev/c/pW8bjRXGNKs), I've
built a prototype that measures the impact of using previous responses as
dictionaries for dynamic (no-cache) content.

Full writeup:
https://dev.to/carlosmateom/beyond-static-resources-delta-compression-for-dynamic-html-3hn4
Live demo: https://delta-compression-demo.onrender.com
Source code: https://github.com/carlosmateo10/delta-compression-demo

The prototype generates realistic dynamic pages (~50KB) with
session-dependent CSS class hashing, large inline JSON state, and
per-request tokens (CSP nonces, CSRF tokens).

Using the previous response from the same session as a dcb dictionary
achieves 96-98% compression savings on cross-query navigation-10-27x
smaller than standard Brotli, and 7-19x smaller than a static shared
dictionary built from different sessions. The static dictionary misses
everything session-specific: hashed class names, CSS values,
feature-flag-dependent DOM structures, and inline state.

For duplicate queries (tab restore, back-button, refresh), the entire page
compresses to ~100 bytes, a 468x reduction over standard Brotli. Only the
per-request CSRF token, CSP nonce, and timestamp changed. The server-side
cost is per-session dictionary storage with TTL-based eviction. For 100K
concurrent sessions with a 600-second TTL, this is roughly 10 GB within a
single cache instance.

Given these initial results, I would love to start a conversation about
drafting a spec extension that adds support for the TTL parameter. We are
also experimenting with this approach for Google Search, and we will have
data from a large-scale deployment to add to the conversation soon. The
Dictionary TTL mechanism (Use-As-Dictionary: match="/search*", ttl=600)
reuses the existing dcb/dcz encoding, the only addition is a TTL parameter.

Feedback welcome on the approach, measurements, or implementation.

Best,
Carlos Mateo Muñoz

Received on Saturday, 7 March 2026 10:43:01 UTC