HTTPQUERY
Français

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