Visual RFC.
ALL RFCs / RFC 8470
Read the RFC ↗
RFC 8470 / HTTP EARLY DATA

Retry a 425 outside early data

03

A 425 response refuses the replay risk; a user agent that used early data retries after the handshake, outside early data.

RFC 8470 · § 5.2EXAMPLE
4 / 4
Retry a 425 outside early dataAn early GET is refused with 425. The user agent waits while its handshake is incomplete; only after completion does it retry in normal application data. No successful final response is assumed.425: retry outside early dataClientServerearly GET /catalog425 Too EarlyTLS handshake completeretry: normal application dataLater response is unspecifiedRetry MUST NOT use early data
04
Retry without 0-RTT.

The handshake has completed. The retry is normal application data, with its eventual response left unspecified.

Source for this drawing: RFC 8470 · Read RFC section 5.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
425 Too Early
A refusal to risk processing a possibly replayed HTTP request, not a general rate-limit response.
Related RFCs and changes

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

KEY POINT

A retry triggered by 425 MUST NOT use early data.

  • 425 Too Early indicates unwillingness to risk processing a request that might be replayed. Clients that use early data MUST retry on receiving 425; automatic retry is SHOULD, not a separate MUST.
  • Any user-agent retry after 425 MUST NOT be sent in early data. If the TLS handshake is still incomplete, the retry waits until it completes.
  • A server SHOULD NOT emit 425 unless the request arrived in early data or Early-Data is set to 1, because it otherwise cannot assume retry support. A 425 is not cacheable by default; its payload is not a representation of an identified resource.
DETAILS

Fictional direct connection: an early GET is refused with 425; the client waits for handshake completion, then retries as normal application data. This does not guarantee a later 200 or prove no replay happened elsewhere. TLS-layer rejection is a different event, with new-connection-state sending rules in §4.

Read the RFC section ↗

All chapters in RFC 8470

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 ↗