HTTPQUERY
Español

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