103 Early Hints
An informational HTTP response that carries Link headers — preload, preconnect — to the browser before the final response is ready, putting server think-time to work.
What it is
103 Early Hints is an informational HTTP status code, defined in RFC 8297. The server sends it before the final response, carrying Link header fields that point at resources the final page will need. The browser can act on those hints immediately — opening connections, fetching stylesheets and fonts — while the server is still assembling the real response.
HTTP/2 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: <https://cdn.example.com>; rel=preconnect
HTTP/2 200 OK
Content-Type: text/html; charset=utf-8
Link: </style.css>; rel=preload; as=style
...
This is the over-the-wire counterpart to the <link rel> hints described in resource hints: same rel keywords, sent ahead of the response instead of waiting in the document head.
Why it matters
Most pages spend their first moments on server think-time — the database query, the template render, the upstream API call — during which the connection is idle and the browser has nothing to do. Early Hints fills that gap. By the time the 200 OK arrives, the critical CSS may already be cached and the CDN connection already open, so the browser parses straight through instead of stalling on round-trips. The win is largest exactly where it hurts most: slow backends and high-latency connections.
How to implement
- Emit a
103response carryingLink: …; rel=preloadorrel=preconnectfor the handful of resources the page genuinely needs first — the LCP image, the critical stylesheet, a font origin. - Repeat the same
Linkheaders on the final response, so clients that ignore103still get the hint. - Only send
103over HTTP/2 or later. Some HTTP/1.1 intermediaries mishandle informational responses, so most clients act on Early Hints only over HTTP/2 or HTTP/3. - Hint sparingly. As with any preload, hinting twenty things just makes them fight for bandwidth.
Many CDNs and edge platforms can synthesise the 103 automatically from the Link headers you already set on the final response, so this is often a configuration toggle rather than application code.
Common mistakes
- Hinting resources the page does not use early, wasting bandwidth and warming the wrong connections.
- Sending
103over HTTP/1.1, where intermediaries may corrupt the response. - Treating it as a replacement for in-document hints — it complements them; keep the
<link rel>tags too.
Verification
- DevTools → Network: a hinted resource starts loading before the document response completes, and its initiator is the Early Hints response.
curl -I --http2against the URL shows the103block ahead of the200.- Browser support is uneven — Chromium acts on
103; other engines currently ignore it harmlessly — so measure the gain, treat it as a progressive enhancement, and never depend on it.