103
HTTPINFOCommon1xx InformationalHIGH confidence

Early Hints

Production Risk

Low. This is a performance optimization. Browsers that do not understand it will simply ignore it, resulting in no negative impact.

What this means

This status code is used to send some response headers before the final HTTP message. It allows a server to send hints to a browser about critical sub-resources that will be needed to render the page, while the server is still preparing the full response.

Why it happens
  1. 1A server anticipates that loading the main HTML document will take some time.
  2. 2The server sends 'Link' headers for critical CSS or JavaScript files that the browser can start fetching immediately.
  3. 3This can significantly improve page load performance by parallelizing resource fetching and server processing.
How to reproduce

A web server begins preparing a complex, database-driven webpage and sends an Early Hints response to tell the browser to start loading the site's main stylesheet.

trigger — this will error
trigger — this will error
(server sends this before the 200 OK)
HTTP/1.1 103 Early Hints
Link: </main.css>; rel=preload; as=style

expected output

HTTP/1.1 103 Early Hints

Fix

Emit Early Hints from your server to preload critical assets

Emit Early Hints from your server to preload critical assets
// Node.js / Express — send 103 before the full response
app.get('/', async (req, res) => {
  // Send 103 Early Hints with Link preload headers
  res.writeEarlyHints({
    'link': [
      '</main.css>; rel=preload; as=style',
      '</app.js>; rel=preload; as=script',
    ],
  });

  // Continue building the full page response
  const html = await renderPage();
  res.status(200).send(html);
});

// Nginx config equivalent:
// location / {
//   http2_push_preload on;
//   add_header Link "</main.css>; rel=preload; as=style";
// }

Why this works

103 Early Hints lets the server send Link preload headers while the full response is still being generated (e.g., waiting on a database query). The browser starts fetching the listed sub-resources immediately, parallelising asset loading with server processing. Browsers that do not support 103 simply ignore the interim response and wait for the final 200.

Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev

← All HTTP errors