Aucune représentation ne correspond à l’en-tête Accept.
Quand l’utiliser
Le client a demandé du XML à une API qui ne parle que JSON.
Causes courantes et solutions
406 apparaît quand le serveur applique strictement l’en-tête Accept : le client demande application/xml ou un type vendeur très précis, et le serveur ne peut produire qu’autre chose. Certains frameworks, comme les blocs respond_to de Rails et les points de terminaison Spring avec produces, renvoient 406 au lieu de se rabattre sur un format par défaut. Envoyez Accept: application/json, ou omettez l’en-tête, et vérifiez ce que votre client HTTP envoie par défaut.
Sur les hébergements mutualisés, ModSecurity et les pare-feu applicatifs web similaires répondent depuis longtemps aux requêtes bloquées par un 406, qui ressemble à un problème de négociation de contenu mais relève en réalité d’une règle de sécurité ; consultez le log du WAF ou demandez à l’hébergeur. Si vous concevez une API, la spécification vous permet d’ignorer un Accept non pris en charge et de renvoyer votre format par défaut, ce qui est généralement plus aimable qu’un 406.
Erreur client (4xx)
Les codes 4xx sont des erreurs client : la requête elle-même est incorrecte, non autorisée ou vise quelque chose qui n’existe pas. Renvoyer la même requête ne servira à rien.
À quoi ça ressemble
HTTP/1.1 406 Not AcceptableComment l’envoyer
| Node.js / Express | res.status(406).end() |
|---|---|
| Python / Flask | return '', 406 |
| nginx | return 406; |
Comment le vérifier
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/