Skip to content

HTTP status code · Success (2xx)

203 Non-Authoritative Information

203 Non-Authoritative Information means the request succeeded, but a transforming proxy modified the content the origin server sent in its 200 response. You almost never see it: most proxies that rewrite content, such as image compressors or injected banners, leave the status at 200.

Facts about this status code
Class2xx, Success
Defined inRFC 9110 §15.3.4
Cacheable by defaultYes, heuristically cacheable
Safe to retryNo need; the request succeeded
Relevant headers
  • Cache-Control: an origin can send no-transform to forbid proxies from modifying the content

What 203 means

RFC 9110, section 15.3.4, lets a proxy that transformed content (section 7.7) tell recipients so, because that can matter later: a revalidation of that content may only make sense along the same chain of proxies. Like 200, a 203 is heuristically cacheable.

Origin servers should not send 203 about their own content. If you run the origin and do not want intermediaries recompressing images or minifying HTML, send Cache-Control: no-transform, which RFC 9111 says proxies must respect.

When to use it

  • Only in a proxy or gateway that rewrites a 200 from upstream: translating, minifying, recompressing or filtering the body.

How to send 203

Only a transforming proxy should emit 203, so there is one example here instead of the usual framework set.

Express (Node.js)
// A proxy that rewrites upstream HTML says so with 203
app.get('/*path', async (req, res) => {
  const upstream = await fetch(`https://origin.example${req.originalUrl}`);
  const html = (await upstream.text()).replaceAll('http://', 'https://');
  res
    .status(upstream.status === 200 ? 203 : upstream.status)
    .type('html')
    .send(html);
});

Commonly confused with

203 vs 200
200 is the origin's own answer; 203 is that same answer after an intermediary altered the content.

Frequently asked questions

Why do I almost never see a 203?
Few proxies bother to change the status when they modify content; most transforming services keep 200. Seeing 203 usually means a corporate or carrier proxy that follows the spec closely.
How do I stop proxies from modifying my responses?
Send Cache-Control: no-transform and serve over HTTPS. Compliant proxies must not transform content marked no-transform, and HTTPS keeps non-terminating proxies from seeing the body at all.
Is a 203 response cacheable?
Yes. RFC 9110 makes 203 heuristically cacheable, the same as 200, unless the method or explicit cache controls say otherwise.

Last reviewed by Arielton Oberek.