Nenhuma representação corresponde ao cabeçalho Accept.
Quando usar
O cliente pediu XML a uma API que só fala JSON.
Causas comuns e soluções
O 406 aparece quando o servidor leva o cabeçalho Accept ao pé da letra: o cliente pede application/xml ou um tipo vendor específico, e o servidor só consegue produzir outra coisa. Alguns frameworks, como blocos respond_to do Rails e endpoints do Spring com produces, retornam 406 em vez de recorrer a um formato padrão. Envie Accept: application/json, ou omita o cabeçalho, e confira o que o seu cliente HTTP envia por padrão.
Em hospedagem compartilhada, o ModSecurity e firewalls de aplicação web parecidos há muito tempo respondem a requisições bloqueadas com 406, o que parece um problema de negociação de conteúdo, mas na verdade é uma regra de segurança; confira o log do WAF ou pergunte à hospedagem. Ao projetar uma API, a especificação permite ignorar um Accept não suportado e retornar o seu formato padrão, o que geralmente é mais amigável que um 406.
Erro do cliente (4xx)
Os códigos 4xx são erros do cliente: a própria requisição está errada, não está autorizada ou aponta para algo que não existe. Repetir a mesma requisição não vai adiantar.
Como fica
HTTP/1.1 406 Not AcceptableComo enviar
| Node.js / Express | res.status(406).end() |
|---|---|
| Python / Flask | return '', 406 |
| nginx | return 406; |
Como verificar
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/