506 Variant Also Negotiates
The server has an internal configuration error: the resource chosen via content negotiation is itself set up to negotiate, creating a loop.
Defined in RFC 2295 §8.1
What 506 means
HTTP 506 Variant Also Negotiates indicates an internal server configuration error specific to transparent content negotiation, a mechanism defined in RFC 2295 where a single resource can have multiple representations, called variants, and the server picks one automatically based on what the client accepts. A 506 happens when the variant the negotiation algorithm selects is itself configured as a negotiable resource rather than a concrete, final representation, creating a circular reference the server cannot resolve. This is not something a client did wrong; it is a misconfiguration entirely on the server side.
In practice 506 is one of the rarest status codes on the modern web, because transparent content negotiation as specified in RFC 2295 was never widely adopted outside a handful of Apache setups using mod_negotiation with type maps. When it does appear, it is almost always the result of a type map file, a .var file in Apache, mistakenly pointing at another type map instead of a real file, so the negotiation algorithm loops back on itself instead of terminating at an actual document.
Common causes
- An Apache type map, a .var file used for content negotiation, points to another type map instead of a concrete file.
- A custom content-negotiation implementation selects a variant resource that is itself configured as negotiable, creating a circular reference.
- A copy-paste or templating error in server configuration duplicates a negotiable resource definition where a final variant was expected.
How to fix a 506
If you are the client (browser user or API caller)
- There is nothing to fix on the client side; retrying will not help since the fault is a server-side configuration loop.
- Report the exact URL and Accept headers used to the site operator, since that combination is what triggers the misconfigured negotiation path.
If you run the server
- Check Apache's mod_negotiation type map files and correct any entry that points at another type map instead of a real file.
- Audit any custom content-negotiation logic so the algorithm always terminates at a concrete, non-negotiable representation.
- Where transparent content negotiation is not actually needed, remove it in favor of explicit routing per content type, which eliminates this failure mode entirely.
Example
GET /document HTTP/1.1
Host: docs.example.com
Accept: text/html, application/pdf
HTTP/1.1 506 Variant Also Negotiates
Content-Type: text/plain
Negotiation error: the chosen variant is itself a negotiable resource.Try it live
Our free status responder returns a real HTTP 506 you can point tests, monitors or a browser at.
GET https://mcp.httpstatus.com/status/506