506 Variant Also Negotiates
Utilisation
Le code de statut 506 Variant Also Negotiates survient lors de la négociation de contenu transparente (Transparent Content Negotiation), où le protocole sélectionne pour le client la meilleure variante de la ressource cible lorsque plusieurs variantes sont disponibles.
Les variantes sont différentes versions de la ressource concernée. Par exemple, une ressource disponible en plusieurs langues possède une variante pour chacune d’elles. La négociation de contenu transparente sélectionne automatiquement la meilleure variante lorsqu’une requête GET ou HEAD est émise.
L’erreur 506 signifie que la variante sélectionnée est elle-même configurée pour négocier, ce qui donne une boucle que le serveur interrompt.
Remarque
Ce protocole a été décrit comme expérimental en 1998 et n’a jamais été officiellement adopté comme standard.
Impact SEO
Les moteurs de recherche traitent 506 comme les autres erreurs serveur 5xx. Des échecs persistants réduisent la fréquence d’exploration et finissent par retirer de l’index les URL concernées.
Exemple
Un client envoie une requête GET avec un en-tête Accept. Le serveur tente la négociation de contenu mais découvre que la variante choisie renvoie elle aussi vers une négociation, ce qui produit une erreur de configuration circulaire.
Requête
GET /docs HTTP/1.1
Host: example.com
Accept: text/html, application/xhtml+xml
Réponse
HTTP/1.1 506 Variant Also Negotiates
Content-Type: text/html; charset=UTF-8
Content-Length: 191
<html>
<head>
<title>Variant Also Negotiates</title>
</head>
<body>
<p>Content negotiation for the requested
resource resulted in a circular reference.</p>
</body>
</html>
Comment corriger
La configuration de négociation de contenu du serveur comporte une référence circulaire : une variante sélectionnée est elle-même configurée pour négocier à nouveau. Brisez la boucle en vous assurant que chaque variante pointe vers une représentation concrète.
Correctifs propres à Apache :
Correctifs généraux :
Ce code de statut est expérimental et rarement observé en production. La plupart des applications modernes gèrent la négociation de contenu au niveau applicatif, ce qui évite complètement le mécanisme de négociation transparente au niveau du serveur.
Références de code
.NET
HttpStatusCode.VariantAlsoNegotiates
Rust
http::StatusCode::VARIANT_ALSO_NEGOTIATES
Rails
:variant_also_negotiates
Go
http.StatusVariantAlsoNegotiates
Symfony
Response::HTTP_VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL
Python3.5+
http.HTTPStatus.VARIANT_ALSO_NEGOTIATES
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_VARIANT_ALSO_NEGOTIATES
Angular
@angular/common/http/HttpStatusCode.VariantAlsoNegotiates