Código de Estado 406 No Aceptable: Protocolo del Comensal Exigente

INEZA Felin-Michel

INEZA Felin-Michel

30 September 2025

Código de Estado 406 No Aceptable: Protocolo del Comensal Exigente

En el rico vocabulario de los códigos de estado HTTP, algunos códigos destacan más que otros, mientras que otros desempeñan discretamente roles vitales para garantizar una comunicación fluida entre cliente y servidor. El código de estado 406 Not Acceptable es uno de esos héroes menos conocidos. Puede que no aparezca con tanta frecuencia como los populares 404 o 500, pero comprender su propósito puede mejorar drásticamente su comprensión de la negociación de contenido y aumentar la flexibilidad de sus aplicaciones web y API.

El código de estado 406 Not Acceptable puede parecer un mensaje críptico de su servidor. Pero una vez que comprende lo que significa, se convierte en una señal poderosa que le ayuda a diseñar API más limpias, predecibles y fáciles de usar.

Este código de estado representa una interrupción en la comunicación dentro de la sofisticada danza del proceso de negociación de contenido, donde clientes y servidores acuerdan el mejor formato para el intercambio de datos.

En esta entrada de blog, profundizaremos en lo que significa HTTP 406 Not Acceptable, por qué ocurre, cómo lo influye la negociación de contenido y cómo usted, como desarrollador o consumidor de API, puede lidiar con ello de manera efectiva. Depurar errores extraños como el 406 Not Acceptable puede llevar mucho tiempo sin las herramientas adecuadas. Por eso recomiendo Apidog. Es una plataforma API gratuita y todo en uno que le permite diseñar, simular, probar, depurar y documentar API con facilidad para que sepa exactamente por qué está recibiendo un 406 y cómo solucionarlo rápidamente.

💡
Si desea explorar y probar API sin problemas, incluidas las respuestas con estado 406, descargue Apidog gratis. Apidog es una herramienta esencial de prueba y documentación de API que facilita y hace efectiva la investigación de códigos de estado HTTP como el 406.
botón

Ahora, exploremos el mundo de la negociación de contenido y el código de estado HTTP 406 Not Acceptable.

El Problema: Todos Quieren los Datos a Su Manera

En los primeros días de la web, los servidores solían ofrecer un único formato para sus recursos, generalmente HTML. Pero a medida que la web evolucionó, surgieron diferentes clientes con distintas necesidades:

El código de estado 406 existe porque a veces un cliente solicita un formato que el servidor simplemente no puede proporcionar para ese recurso en particular.

¿Qué Significa Realmente HTTP 406 Not Acceptable?

El código de estado 406 Not Acceptable indica que el servidor no puede producir una respuesta que coincida con la lista de valores aceptables definidos en los encabezados de negociación de contenido proactiva de la solicitud, y que el servidor no está dispuesto a proporcionar una representación predeterminada.

En términos más sencillos: "Me has dicho exactamente qué formatos aceptarás, y no puedo proporcionar el recurso en ninguno de esos formatos."

Una respuesta 406 adecuada debería incluir información sobre qué formatos el servidor puede proporcionar para el recurso solicitado. Esto se hace típicamente con encabezados o en el cuerpo de la respuesta.

Así es como podría verse una respuesta 406:

HTTP/1.1 406 Not AcceptableContent-Type: text/htmlVary: Accept
<html><head><title>406 No Aceptable</title></head><body><h1>No Aceptable</h1><p>Este recurso está disponible en los siguientes formatos:</p><ul><li>application/json</li><li>application/xml</li></ul></body></html>

Para las API, es más útil devolver una respuesta estructurada:

HTTP/1.1 406 Not AcceptableContent-Type: application/jsonVary: Accept
{
  "error": "not_acceptable",
  "message": "El recurso solicitado no está disponible en el formato solicitado.",
  "available_formats": [
    "application/json",
    "application/xml"
  ]
}

No se trata de si la solicitud es válida. Se trata de si el tipo de respuesta es aceptable.

La Magia de la Negociación de Contenido: Cómo Funcionan los Encabezados Accept

Para entender el 406, necesitamos comprender cómo los clientes le dicen a los servidores qué formatos prefieren. Esto ocurre a través del encabezado Accept.

El Encabezado Accept en Acción

Cuando un cliente realiza una solicitud, puede especificar qué tipos de contenido puede manejar y cuáles prefiere:

Un ejemplo sencillo:

GET /api/users/123 HTTP/1.1Accept: application/json

Esto dice: "Quiero datos de usuario, y solo entiendo JSON."

Un ejemplo más sofisticado:

GET /api/users/123 HTTP/1.1Accept: application/json, text/html;q=0.9, application/xml;q=0.8

Esto dice: "Prefiero JSON, pero también puedo manejar HTML (con un 90% de preferencia) y XML (con un 80% de preferencia)."

El parámetro q (valor de calidad) varía de 0 a 1, siendo 1 el más preferido.

Cuando la Negociación Falla

Un error 406 ocurre cuando el servidor examina el encabezado Accept y se da cuenta de que:

  1. Tiene el recurso que el cliente desea
  2. No puede proporcionarlo en ninguno de los formatos especificados por el cliente
  3. No está dispuesto a enviar un formato predeterminado (como enviar JSON a un cliente que solo acepta XML)

¿Cómo Encaja el 406 Not Acceptable en la Negociación de Contenido?

Cuando un cliente envía una solicitud HTTP que incluye encabezados Accept especificando tipos de medios aceptables (por ejemplo, solicitando solo respuestas JSON), el servidor intentará entregar el contenido en consecuencia.

Si el servidor no puede proporcionar ningún contenido aceptable que cumpla con los criterios, responde con:

textHTTP/1.1 406 Not Acceptable Content-Type: text/html

En este punto, significa que el servidor rechaza la solicitud porque ninguna de las representaciones de contenido disponibles coincide con las preferencias del cliente.

Por Qué los Servidores Devuelven 406 en Lugar de 200 OK

Podría pensar: ¿por qué no simplemente devolver algo, incluso si no es el formato preferido?

He aquí por qué los servidores devuelven 406:

Causas Comunes de una Respuesta 406

Aquí hay algunas razones típicas por las que verá 406 Not Acceptable:

Escenarios Reales que Desencadenan Errores 406

1. Conflictos de Versionado de API

Imagine una API que solo sirve JSON en su v2, pero un cliente todavía espera XML de los días de la v1:

GET /v2/products/456 HTTP/1.1Accept: application/xmlHTTP/1.1 406 Not AcceptableContent-Type: application/json
{
  "error": "Esta versión de API solo admite JSON",
  "available_formats": ["application/json"]
}

2. Configuración de Cliente Demasiado Restrictiva

Una aplicación móvil podría estar codificada para aceptar solo JSON, pero se encuentra con un servidor que solo sirve ciertos recursos como XML:

GET /reports/quarterly-sales HTTP/1.1Accept: application/jsonHTTP/1.1 406 Not Acceptable

(El informe podría estar disponible solo como CSV o PDF)

3. Falta de Mecanismo de Reserva Predeterminado

Algunos servidores están configurados para ser estrictos con la negociación de contenido y se niegan a adivinar qué formato devolver cuando la negociación falla.

¿Cómo Suelen Manejar los Servidores el 406?

Curiosamente, algunos servidores ignoran la negociación de contenido estricta y recurren a una respuesta predeterminada en lugar de responder con un 406.

Sin embargo, las API RESTful estrictas o los servicios que enfatizan la comunicación precisa podrían devolver un 406 cuando no se pueden cumplir los requisitos del cliente.

406 Not Acceptable vs Códigos de Estado Relacionados

Para aclarar el papel del 406, veamos los estados HTTP relacionados:

Código de Estado Significado Cuándo Usar
400 Bad Request Sintaxis mal formada o solicitud inválida La solicitud no puede ser entendida
406 Not Acceptable Solicitud válida pero el servidor no puede cumplir con los encabezados accept Fallo en la negociación de contenido
415 Unsupported Media Type El servidor no puede procesar el tipo de contenido enviado por el cliente Medio del cuerpo de la solicitud inválido
Diferencia entre 406 y 415 406 se relaciona con el tipo de respuesta, 415 se relaciona con el tipo de cuerpo de la solicitud

¿Cómo Deben Manejar los Clientes las Respuestas 406?

Los clientes que reciben un 406 deberían:

¿Qué Pueden Hacer los Desarrolladores para Evitar o Manejar el 406?

Páginas y Mensajes de Error 406 Personalizados

Para sitios web y API, ofrecer respuestas de error 406 significativas y útiles mejora la experiencia del desarrollador y del usuario:

Probando la Negociación de Contenido con Apidog

Material promocional de Apidog

Probar cómo su API maneja los diferentes encabezados Accept es crucial para construir aplicaciones robustas. Apidog hace que este proceso sea sencillo y eficiente.

Con Apidog, puede:

  1. Modificar Encabezados Fácilmente: Agregue y modifique rápidamente los encabezados Accept para probar cómo responde su servidor a diferentes solicitudes de tipos de contenido.
  2. Probar Múltiples Formatos: Cree una colección de pruebas para el mismo endpoint con diferentes encabezados Accept (JSON, XML, HTML) para asegurar una cobertura completa.
  3. Validar Respuestas 406: Envíe intencionalmente encabezados Accept restrictivos para verificar que su servidor devuelve respuestas 406 adecuadas con información útil sobre el error.
  4. Automatizar Pruebas de Negociación de Contenido: Cree suites de prueba que verifiquen automáticamente que su API maneja correctamente varias solicitudes de tipos de contenido y devuelve los códigos de estado apropiados.
  5. Depurar Escenarios Complejos: Utilice el registro detallado de Apidog para comprender exactamente por qué ocurrió un error 406 y qué formatos admite realmente el servidor.
botón

Este enfoque sistemático asegura que su API pueda manejar elegantemente a clientes con diferentes requisitos de formato. En resumen: en lugar de andar a tientas en la oscuridad, sabrá exactamente qué es aceptable. Descargue Apidog gratis y aumente su productividad al solucionar problemas de negociación de contenido y escenarios 406.

Mejores Prácticas para Manejar Errores 406

Para Desarrolladores de Servidor:

  1. Proporcione Información de Error Útil: Al devolver un 406, incluya siempre información sobre los formatos que admite. Esto ayuda a los desarrolladores del cliente a corregir sus solicitudes.
  2. Use el Encabezado Vary: Incluya un encabezado Vary: Accept en sus respuestas para indicar que el contenido de la respuesta varía según el encabezado Accept. Esto ayuda a que los sistemas de caché funcionen correctamente.
  3. Considere el Comportamiento Predeterminado: Si bien la especificación HTTP permite a los servidores devolver una representación predeterminada, muchas API modernas eligen ser estrictas y devolver 406 para obligar a los clientes a ser explícitos sobre sus requisitos.
  4. Documente los Formatos Compatibles: Documente claramente qué tipos de contenido admite su API para cada endpoint.

Para Desarrolladores de Cliente:

  1. Sea Flexible en los Encabezados Accept: A menos que tenga una razón específica, incluya múltiples formatos en su encabezado Accept con valores de calidad apropiados.
  2. Maneje el 406 con Elegancia: Cuando reciba un 406, verifique la respuesta para ver los formatos disponibles y ajuste su solicitud o muestre un mensaje de error útil al usuario.
  3. Tenga Lógica de Reserva: Considere tener una lógica de reserva que pueda manejar diferentes formatos si su formato preferido principal no está disponible.

El Héroe Anónimo de la Negociación de Contenido

El encabezado Vary es crucial para un comportamiento de caché adecuado cuando interviene la negociación de contenido. Cuando un servidor incluye Vary: Accept en su respuesta, le indica a las cachés que el contenido de la respuesta depende del valor del encabezado Accept.

Esto evita que una caché sirva incorrectamente una respuesta JSON a un cliente que solicitó XML, o viceversa.

Impacto en el SEO de las Respuestas 406

Generalmente, el 406 no afecta significativamente al SEO porque los motores de búsqueda suelen manejar la negociación de contenido de forma robusta y prefieren respuestas válidas. Sin embargo, las API o sitios web mal configurados que devuelven con frecuencia un 406 pueden frustrar a los rastreadores o usuarios.

Diseño Moderno de API y el 406

En el diseño moderno de API RESTful, el uso del 406 ha evolucionado:

Sin embargo, el 406 sigue siendo relevante para:

Solución de Problemas de Errores 406

Consideraciones de Seguridad en Torno al 406

Conclusión: Adoptando HTTP 406 Not Acceptable para una Comunicación Precisa

El código de estado HTTP 406 Not Acceptable representa un principio importante de la arquitectura web: la comunicación clara entre clientes y servidores sobre sus capacidades y requisitos. No es un error al que temer, sino un mecanismo para asegurar que el intercambio de datos se realice en formatos mutuamente comprensibles.

Si bien es posible que no se encuentre con el 406 a diario, comprenderlo lo convierte en un mejor ciudadano de la web. Enseña la importancia de ser explícito sobre los requisitos de formato de datos y de manejar la negociación de formatos con elegancia.

Para los desarrolladores de API, implementar correctamente la negociación de contenido y las respuestas 406 conduce a API más robustas y flexibles. Para los desarrolladores de clientes, comprender cómo trabajar con errores 406 asegura que sus aplicaciones puedan adaptarse a diferentes capacidades del servidor.

En un mundo donde los datos necesitan fluir entre diversos sistemas y plataformas, la capacidad de negociar el formato del contenido es más valiosa que nunca. Y cuando necesita probar y perfeccionar estas negociaciones, una herramienta como Apidog proporciona el entorno perfecto para asegurar que sus aplicaciones se comuniquen de manera efectiva, independientemente de las preferencias de formato.

botón

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs