406 Not Acceptable

Ninguna representación coincide con la cabecera Accept.

Cuándo usarlo

El cliente pidió XML a una API que solo usa JSON.

Causas habituales y soluciones

406 aparece cuando el servidor interpreta la cabecera Accept de forma estricta: el cliente pide application/xml o un tipo de proveedor muy concreto, y el servidor solo puede producir otra cosa. Algunos frameworks, como los bloques respond_to de Rails y los endpoints de Spring con produces, devuelven 406 en lugar de recurrir a un formato alternativo. Envía Accept: application/json, u omite la cabecera, y comprueba qué envía tu cliente HTTP por defecto.

En hosting compartido, ModSecurity y otros firewalls de aplicaciones web similares llevan tiempo respondiendo con 406 a las solicitudes bloqueadas, lo que parece un problema de negociación de contenido pero en realidad es una regla de seguridad; revisa el log del WAF o pregunta al proveedor de hosting. Al diseñar una API, la especificación te permite ignorar un Accept no admitido y devolver tu formato predeterminado, lo que suele ser más amable que un 406.

Error del cliente (4xx)

Los códigos 4xx son errores del cliente: la solicitud en sí es incorrecta, no está autorizada o apunta a algo que no existe. Repetir la misma solicitud no servirá de nada.

Cómo se ve

HTTP/1.1 406 Not Acceptable

Cómo enviarlo

Node.js / Expressres.status(406).end()
Python / Flaskreturn '', 406
nginxreturn 406;

Cómo comprobarlo

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

Abrir Códigos de estado HTTP