< HTTP/1.1 203 Non-Authoritative Information203 Non-Authoritative Information
203 means a proxy modified the origin response before passing it on. Learn when it is sent, how it differs from 200, caching rules and what clients should do.
- Cacheable
- Yes, by default
- Client action
- Use the response (a proxy altered it)
- Usually sent by
- Transforming proxy
- Spec
- RFC 9110 §15.3.4
- Often confused with
- 200
On this page
TL;DR: 203 is a 200 that tells you “the payload was modified by an intermediary and may not match the origin’s.” Only transforming proxies are supposed to send it, and you will rarely see it. Clients treat it as success.
What it means
RFC 9110 §15.3.4 says an intermediary that applies a transformation to the content of a 200 response may change the status to 203 to tell the recipient the enclosed payload is not necessarily what the origin sent. The response is still a success and works like 200 everywhere else.
GET /photo.jpg HTTP/1.1
Host: images.example.com
HTTP/1.1 203 Non-Authoritative Information
Content-Type: image/jpeg
Content-Length: 18342
Via: 1.1 mobile-optimizer
Warning: 214 mobile-optimizer "Transformation applied"
The Warning header with code 214 (Transformation Applied) was the older way to flag the same thing, but Warning is obsolete in current HTTP caching (RFC 9111 removed it), so do not expect it. The Via header is how you find the intermediary that touched the response.
Handling it
- On the client, treat it as you treat 200.
fetch().okis true for all 2xx. - If integrity matters (checksums, signatures, downloads that must be bit-exact), a 203 is the cue to verify against a trusted digest or fetch via a path without transformation, for example HTTPS end to end so no intermediary can alter content.
- On an intermediary you operate that rewrites bodies (image recompression, HTML minification, ad stripping), 203 is the correct signal, plus
Via. Many send 200 and say nothing. Whatever you run, honourCache-Control: no-transformfrom the origin, which forbids exactly these rewrites.
Two practical consequences follow from the cacheability. A 203 is stored and reused by caches exactly like a 200, so a transformed copy can outlive the transformation: if a mobile proxy recompressed an image at low quality and a shared cache kept it, desktop users may later receive the degraded copy. The origin’s defence is Cache-Control: no-transform, which tells intermediaries not to change the payload, and Vary when the content legitimately differs by client.
The second consequence is for monitoring. Alerts that match on status == 200 will silently ignore a 203, so use a 2xx range check. The reverse also applies: some tools log 203 as an anomaly when it comes from a CDN feature that rewrites HTML (minification, script injection). Compare the body hash against a direct-to-origin request to confirm what changed.
Because most transformation happens inside TLS-terminating CDNs under the origin owner’s control, and plain-HTTP transcoding proxies have mostly disappeared, 203 is nearly extinct. If you see it, find out which hop produced it with Via, Server and X-Cache.
Try it with curl
203 Non-Authoritative Information is only sent by a transforming proxy that modified an origin’s 200. Most proxies and CDNs never emit it. To check whether one sits in your path, send the request through it and look at the status and the Via header.
curl -i -x http://proxy.example.com:3128 http://example.com/
Related
- 200 OK
- 304 Not Modified
- Via
- Cache-Control:
no-transform.
Frequently asked questions
What does 203 Non-Authoritative Information mean?
The request succeeded, but a transforming proxy modified the content, so it may differ from what the origin server sent. It is a 200 with a flag saying the payload was altered in transit.
When would a server send 203?
Almost never in practice. A proxy that rewrites the payload, for instance a mobile transcoder that recompresses images or a privacy proxy that strips content, may switch 200 to 203 to signal the change.
Is 203 cacheable?
Yes, 203 is cacheable by default, like 200, so a cache can store it and apply the usual freshness rules. Be aware that a cached transformed copy may later be served to clients expecting the original.
Do browsers treat 203 differently from 200?
No, browsers and fetch treat any 2xx as success, and response.ok is true for 203. Only code that inspects the exact status sees the difference.
Should my API return 203?
Only if a gateway you operate modifies upstream payloads and wants to say so. For an origin that is just returning data, use 200. Using 203 for "data from a cache" or "data from a third-party source" is a misuse that confuses clients.
Sources
Related
202 Accepted
The request was accepted for processing but not completed yet. Learn when to use 202 for asynchronous operations.
204 No Content
The request succeeded with no response body. Learn when to use 204 No Content for successful operations that don't return data.
205 Reset Content: What It Does and Browser Support
205 Reset Content tells the client to reset the view that sent the request, like clearing a form. Learn its rules, fetch behaviour and why it is rarely used.
207 Multi-Status: WebDAV Per-Resource Results
207 Multi-Status carries an XML body with a separate status per resource. See a PROPFIND example, how to parse it, and why the top-level code is not the result.