506 Variant Also Negotiates
The HTTP 506 Variant Also Negotiates server error response status code is returned during content negotiation when there is recursive loop in the process of selecting a resource.
Agent-driven content negotiation enables a client and server to collaboratively decide the best variant of a given resource when the server has multiple variants. A server sends a 506 status code due to server misconfiguration that results in circular references when creating responses.
Lack of standardization of how clients automatically choose from responses, and the additional round-trips that slow down client-server interaction mean this mechanism is rarely used. Server-driven content negotiation is far more common, where a server directly chooses the most appropriate resource for the client based on the request headers (Accept-Language, Accept, etc.).
Status
506 Variant Also Negotiates Examples
>Resource with variants
In the following example, a client requests a page in the fr locale using the Accept-Language header. This can be performed using curl:
curl -H "Negotiate: trans" -H "Accept-Language: fr;" http://example.com/index This produces the following request:
GET /index HTTP/1.1 Host: example.com User-Agent: curl/8.7.1 Accept: */* Negotiate: trans Accept-Language: fr Due to server misconfiguration, the variant response for fr points to a type map which itself causes transparent negotiation to be performed. The server may detect this condition by the presence of a TCN header in a choice response before it is sent:
HTTP/1.1 506 Variant Also Negotiates Date: Mon, 22 Jul 2024 10:00:00 GMT Server: Apache/2.4.41 (Unix) Content-Type: text/html; charset=UTF-8 Content-Length: 233 TCN: list Vary: negotiate,accept-language Alternates: {"index.html.en" 1 {type text/html} {language en} {length 48}}, {"another-map.html.fr.map" 1 {type text/html} {language fr} {length 45}}}} <html> <head> <title>506 Variant Also Negotiates</title> </head> <body> <h1>Variant Also Negotiates</h1> <p>A variant for the requested resource is itself a negotiable resource. This indicates a configuration error.</p> </body> </html> Specifications
| Specification |
|---|
| RFC 2295> # section-8.1> |
See also
300 Multiple Choices- RFC 2295
- Content negotiation
- HTTP response status codes
- Content Negotiation in Apache HTTP Server documentation
- Apache httpd
mod_negotiation.csource showing conditions that triggerHTTP_VARIANT_ALSO_VARIESresponse.