Preguntas

Error 406 – Not Acceptable (No aceptable) Imprimir

  • 0

El error 406 ocurre cuando el servidor sí encuentra el recurso, pero no puede entregarlo en un formato aceptable según lo que el navegador o cliente solicita.

Esto suele estar relacionado con cabeceras como:

  • Accept:

  • Accept-Language:

  • Accept-Encoding:

  • Accept-Charset:

El cliente pide un formato, idioma o codificación que el servidor no puede proporcionar.


 Causas más comunes

  •  El navegador o cliente solicita un formato no disponible (por ejemplo, pide JSON pero el servidor solo entrega HTML).

  •  Idioma o codificación no soportados (Accept-LanguageAccept-Charset).

  •  Compresiones o codificaciones incompatibles (gzipbrdeflate).

  •  Reglas de mod_negotiation o mod_security en Apache que filtran contenido.

  •  Configuraciones incorrectas en APIs que no devuelven el tipo MIME esperado.

  •  Problemas en la negociación de contenido en frameworks como Laravel, Symfony, Django, Node.js.

  •  Filtros de seguridad que bloquean contenido sospechoso.


???? Soluciones recomendadas

1) Verificar el tipo de contenido solicitado

Ejemplo típico:

El cliente envía:

 
Accept: application/json

Pero el servidor responde solo con:

 
Content-Type: text/html

 Solución: ajustar la ruta para que devuelva el tipo correcto.


2) Revisar idiomas y codificaciones

Si el navegador pide un idioma no disponible:

 
Accept-Language: jp

y tu sitio no lo soporta → 406.

Solución: permitir idiomas alternativos o eliminar restricciones.


3) Desactivar temporalmente mod_security / mod_negotiation

En servidores Apache, estos módulos pueden bloquear contenido.

En cPanel → ModSecurity → Desactivar (solo para pruebas)
Si el error desaparece, ajusta las reglas.


4) Revisar compresiones en el servidor

Si usas gzip o Brotli y el cliente no los acepta:

 
Accept-Encoding: identity

 Necesitas desactivar compresión para esa petición o ajustar la configuración.


5) Corregir respuestas en APIs o frameworks

Ejemplo en Laravel:

Si tu ruta devuelve HTML cuando debería devolver JSON:

 
return response()->json([...]);

En Node.js:

Asegúrate de usar:

 
res.json({});

y no res.send() con HTML.


6) Probar desde otro navegador o con cURL

Esto ayuda a verificar qué está solicitando realmente el cliente.

Ejemplo:

 
curl -I -H "Accept: application/json" https://tusitio.com

 Consejo Pro

Revisa la cabecera Accept: que envía el cliente y compárala con el Content-Type: que devuelve el servidor.

Si no coinciden → aparece el 406.

Ejemplo de solución rápida en Apache:

 
AddType application/json .json
 

Esto permite entregar JSON correctamente.


¿Fue útil la respuesta?
Volver