Visual RFC.
ALL RFCs / RFC 8246
Read the RFC ↗
RFC 8246 / IMMUTABLE HTTP RESPONSES

Keep the promise within freshness

02

A fresh immutable response can skip ordinary reload revalidation. Expiry or an explicit user override changes that decision.

RFC 8246 · § 2EXAMPLE
4 / 4
Keep the promise within freshnessChosen lifetime 3600 seconds is a precomputed HTTP freshness lifetime. Age 600 is fresh: on ordinary reload SHOULD NOT conditionally revalidate. Age 3600 is at expiry and not fresh under the strict comparison. A separate force-reload case at age 600 overrides skip advice. The age marker is drawn at its proportional position, not time since opening a tab.The promise ends when freshness endsResponse: max-age=3600, immutableSeparate force-reload example03600age 6003600 > 600 → freshconditional validationExplicit override: skip advice does not applyImmutable adds no permission to reuse stale content
04
Honor an explicit user override.

Separate example at age 600: a force reload overrides the advice to skip validation even though the response is fresh. Reload is not always a force reload.

Source for this drawing: RFC 8246 · Read RFC section 2 ↗

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
New to this? Start hereA quick picture + helpful background

A message needs an address.

Think of a packet as a small addressed envelope. Devices pass it onward; transport protocols decide what delivery promises an application gets.

Helpful first, if these ideas are unfamiliar

These pictures are analogies to help you learn. The linked RFC explains the actual rules.

Terms in this drawing
Freshness lifetime
How long a stored response can be treated as fresh.
Current age
HTTP’s calculated age of a stored response.
Conditional request
A request asking whether a stored representation is still valid.
Related RFCs and changes

“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.

KEY POINT

Freshness limits the promise.

  • Clients SHOULD NOT send a conditional request for an immutable response during its freshness lifetime, for example on reload, unless the user explicitly overrides that behavior.
  • The directive applies only while the stored response is fresh. Stale responses SHOULD be revalidated as they normally would without immutable.
  • The worked example uses max-age=3600 seconds and a precomputed current_age. Under RFC9111§4.2, fresh means freshness_lifetime > current_age; equality is no longer fresh.
DETAILS

The timeline uses a simplified, already calculated response age, not elapsed time since a browser tab opened. Actual HTTP age calculation accounts for response dates and transit/cache residence. Stale handling follows ordinary caching rules; immutable supplies no new stale-use permission. The force-reload state is a separate example back at age 600, not a backward-running clock.

Read the RFC section ↗

All chapters in RFC 8246

Drawing view

Scroll the drawing to see every part. Playback controls stay above it.

RFC 9700 / CHAPTERS

Chapters

For full details, tables, algorithms, and exceptions, read the original RFC.

RFC status and corrections ↗