506 Variant Also Negotiates
Uso
El código de estado 506 Variant Also Negotiates se produce durante la negociación de contenido transparente (Transparent Content Negotiation), en la que el protocolo selecciona para el cliente la mejor variante del recurso de destino cuando hay varias variantes disponibles.
Las variantes son versiones distintas del recurso en cuestión. Por ejemplo, un recurso disponible en varios idiomas tiene una variante para cada uno. La negociación de contenido transparente selecciona automáticamente la mejor variante cuando se realiza una solicitud GET o HEAD.
El error 506 significa que la variante seleccionada está configurada a su vez para negociar, lo que da lugar a un bucle que el servidor interrumpe.
Nota
Este protocolo se describió como experimental en 1998 y no se ha adoptado oficialmente como estándar.
Impacto en SEO
Los motores de búsqueda tratan 506 igual que el resto de errores de servidor 5xx. Los fallos persistentes reducen la frecuencia de rastreo y acaban eliminando del índice las URL afectadas.
Ejemplo
Un cliente envía una solicitud GET con una cabecera Accept. El servidor intenta la negociación de contenido, pero descubre que la variante elegida también hace referencia a una negociación, lo que provoca un error de configuración circular.
Solicitud
GET /docs HTTP/1.1
Host: example.com
Accept: text/html, application/xhtml+xml
Respuesta
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>
Cómo solucionarlo
La configuración de negociación de contenido del servidor tiene una referencia circular: una variante seleccionada está configurada a su vez para seguir negociando. Rompa el bucle asegurándose de que cada variante apunta a una representación concreta.
Correcciones específicas de Apache:
Correcciones generales:
Este código de estado es experimental y se ve rara vez en producción. La mayoría de las aplicaciones modernas gestionan la negociación de contenido en la capa de aplicación, evitando por completo el mecanismo de negociación transparente a nivel de servidor.
Referencias de código
.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