Código de Status 406 Não Aceitável: O Protocolo do Comilão Seletivo

INEZA Felin-Michel

INEZA Felin-Michel

30 setembro 2025

Código de Status 406 Não Aceitável: O Protocolo do Comilão Seletivo

Apidog para empresas

Implantação local

SSO & RBAC

Conforme SOC 2

Explorar Apidog Enterprise

No rico vocabulário dos códigos de status HTTP, alguns códigos se destacam mais que outros, enquanto alguns desempenham silenciosamente papéis vitais para garantir comunicações cliente-servidor tranquilas. O código de status 406 Not Acceptable é um desses heróis menos conhecidos. Ele pode não aparecer com tanta frequência quanto os populares 404 ou 500, mas entender seu propósito pode melhorar drasticamente sua compreensão sobre negociação de conteúdo e aumentar a flexibilidade de suas aplicações web e APIs.

O código de status 406 Not Acceptable pode parecer uma mensagem enigmática do seu servidor. Mas, uma vez que você entende o que ele significa, ele se torna um sinal poderoso que ajuda a projetar APIs mais limpas, previsíveis e amigáveis ao usuário.

Este código de status representa uma falha de comunicação na sofisticada dança do processo de negociação de conteúdo, onde clientes e servidores concordam sobre o melhor formato para a troca de dados.

Nesta postagem do blog, vamos mergulhar fundo no que significa HTTP 406 Not Acceptable, por que ele acontece, como a negociação de conteúdo o influencia e como você, como desenvolvedor ou consumidor de API, pode lidar com ele de forma eficaz. Depurar erros estranhos como o 406 Not Acceptable pode consumir muito tempo sem as ferramentas certas. É por isso que eu recomendo o Apidog. É uma plataforma de API gratuita e completa que permite projetar, simular, testar, depurar e documentar APIs com facilidade, para que você saiba exatamente por que está recebendo um 406 e como corrigi-lo rapidamente.

💡
Se você deseja explorar e testar APIs de forma contínua, incluindo respostas com status 406, baixe o Apidog gratuitamente. Apidog é uma ferramenta essencial de teste e documentação de API que torna a investigação de códigos de status HTTP como o 406 fácil e eficaz.
botão

Agora, vamos explorar o mundo da negociação de conteúdo e o código de status HTTP 406 Not Acceptable.

O Problema: Todos Querem Dados à Sua Maneira

Nos primórdios da web, os servidores geralmente ofereciam um único formato para seus recursos, geralmente HTML. Mas, à medida que a web evoluiu, diferentes clientes surgiram com necessidades distintas:

O código de status 406 existe porque, às vezes, um cliente solicita um formato que o servidor simplesmente não pode fornecer para aquele recurso específico.

O Que o HTTP 406 Not Acceptable Realmente Significa?

O código de status 406 Not Acceptable indica que o servidor não pode produzir uma resposta que corresponda à lista de valores aceitáveis definidos nos cabeçalhos de negociação de conteúdo proativa da requisição, e que o servidor não está disposto a fornecer uma representação padrão.

Em termos mais simples: "Você me disse exatamente quais formatos aceitará, e eu não posso fornecer o recurso em nenhum desses formatos."

Uma resposta 406 adequada deve incluir informações sobre quais formatos o servidor pode fornecer para o recurso solicitado. Isso é tipicamente feito com cabeçalhos ou no corpo da resposta.

Aqui está o que uma resposta 406 pode parecer:

HTTP/1.1 406 Not AcceptableContent-Type: text/htmlVary: Accept
<html><head><title>406 Não Aceitável</title></head><body><h1>Não Aceitável</h1><p>Este recurso está disponível nos seguintes formatos:</p><ul><li>application/json</li><li>application/xml</li></ul></body></html>

Para APIs, é mais útil retornar uma resposta estruturada:

HTTP/1.1 406 Not AcceptableContent-Type: application/jsonVary: Accept
{
  "error": "not_acceptable",
  "message": "O recurso solicitado não está disponível no formato solicitado.",
  "available_formats": [
    "application/json",
    "application/xml"
  ]
}

Não se trata de a requisição ser válida. Trata-se de o tipo de resposta ser aceitável.

A Magia da Negociação de Conteúdo: Como os Cabeçalhos Accept Funcionam

Para entender o 406, precisamos compreender como os clientes informam aos servidores quais formatos eles preferem. Isso acontece através do cabeçalho Accept.

O Cabeçalho Accept em Ação

Quando um cliente faz uma requisição, ele pode especificar quais tipos de conteúdo pode manipular e quais prefere:

Um exemplo simples:

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

Isso significa: "Eu quero dados de usuário e só entendo JSON."

Um exemplo mais sofisticado:

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

Isso significa: "Eu prefiro JSON, mas também consigo lidar com HTML (com 90% de preferência) e XML (com 80% de preferência)."

O parâmetro q (valor de qualidade) varia de 0 a 1, sendo 1 o mais preferido.

Quando a Negociação Falha

Um erro 406 ocorre quando o servidor analisa o cabeçalho Accept e percebe:

  1. Ele tem o recurso que o cliente deseja
  2. Ele não pode fornecê-lo em nenhum dos formatos especificados pelo cliente
  3. Ele não está disposto a enviar um formato padrão (como enviar JSON para um cliente que só aceita XML)

Como o 406 Not Acceptable se Encaixa na Negociação de Conteúdo?

Quando um cliente envia uma requisição HTTP incluindo cabeçalhos Accept especificando tipos de mídia aceitáveis (por exemplo, solicitando apenas respostas JSON), o servidor tentará entregar o conteúdo de acordo.

Se o servidor não puder fornecer nenhum conteúdo aceitável que se encaixe nos critérios, ele responde com:

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

Neste ponto, significa que o servidor rejeita a requisição porque nenhuma das representações de conteúdo disponíveis corresponde às preferências do cliente.

Por Que Servidores Retornam 406 em Vez de 200 OK

Você pode pensar: por que não retornar algo, mesmo que não seja o formato preferido?

Aqui está o porquê de os servidores retornarem 406:

Causas Comuns de uma Resposta 406

Aqui estão algumas razões típicas pelas quais você verá 406 Not Acceptable:

Cenários do Mundo Real Que Acionam Erros 406

1. Conflitos de Versionamento de API

Imagine uma API que só serve JSON em sua v2, mas um cliente ainda espera XML dos tempos da v1:

GET /v2/products/456 HTTP/1.1Accept: application/xmlHTTP/1.1 406 Not AcceptableContent-Type: application/json
{
  "error": "Esta versão da API suporta apenas JSON",
  "available_formats": ["application/json"]
}

2. Configuração de Cliente Excessivamente Restritiva

Um aplicativo móvel pode estar codificado para aceitar apenas JSON, mas encontra um servidor que só serve certos recursos como XML:

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

(O relatório pode estar disponível apenas como CSV ou PDF)

3. Ausência de Fallback Padrão

Alguns servidores são configurados para serem rigorosos quanto à negociação de conteúdo e se recusam a adivinhar qual formato retornar quando a negociação falha.

Como os Servidores Geralmente Lidam com 406?

Curiosamente, alguns servidores ignoram a negociação de conteúdo estrita e recorrem a uma resposta padrão, em vez de responder com 406.

No entanto, APIs RESTful estritas ou serviços que enfatizam a comunicação precisa podem retornar 406 quando os requisitos do cliente não podem ser atendidos.

406 Not Acceptable vs Códigos de Status Relacionados

Para esclarecer o papel do 406, vejamos os status HTTP relacionados:

Código de Status Significado Quando Usar
400 Requisição Inválida Sintaxe malformada ou requisição inválida Requisição não pode ser entendida
406 Não Aceitável Requisição válida, mas o servidor não pode atender aos cabeçalhos accept Falha na negociação de conteúdo
415 Tipo de Mídia Não Suportado Servidor não pode processar o tipo de conteúdo enviado pelo cliente Mídia do corpo da requisição inválida
Diferença entre 406 e 415 406 se relaciona ao tipo de resposta, 415 se relaciona ao tipo de corpo da requisição

Como os Clientes Devem Lidar com Respostas 406?

Clientes que recebem 406 devem:

O Que os Desenvolvedores Podem Fazer Para Evitar ou Lidar com 406?

Páginas e Mensagens de Erro 406 Personalizadas

Para sites e APIs, servir respostas de erro 406 significativas e úteis melhora a experiência do desenvolvedor e do usuário:

Testando a Negociação de Conteúdo com Apidog

Material Promocional Apidog-41.png

Testar como sua API lida com diferentes cabeçalhos Accept é crucial para construir aplicações robustas. O Apidog torna esse processo simples e eficiente.

Com Apidog, você pode:

  1. Modificar Cabeçalhos Facilmente: Adicione e modifique rapidamente os cabeçalhos Accept para testar como seu servidor responde a diferentes requisições de tipo de conteúdo.
  2. Testar Múltiplos Formatos: Crie uma coleção de testes para o mesmo endpoint com diferentes cabeçalhos Accept (JSON, XML, HTML) para garantir uma cobertura abrangente.
  3. Validar Respostas 406: Envie intencionalmente cabeçalhos Accept restritivos para verificar se seu servidor retorna respostas 406 adequadas com informações de erro úteis.
  4. Automatizar Testes de Negociação de Conteúdo: Crie suítes de teste que verificam automaticamente se sua API lida corretamente com várias requisições de tipo de conteúdo e retorna os códigos de status apropriados.
  5. Depurar Cenários Complexos: Use o registro detalhado do Apidog para entender exatamente por que um erro 406 ocorreu e quais formatos o servidor realmente suporta.
botão

Essa abordagem sistemática garante que sua API possa lidar graciosamente com clientes com diferentes requisitos de formato. Em resumo: em vez de tatear no escuro, você sabe exatamente o que é aceitável. Baixe o Apidog gratuitamente e aumente sua produtividade na solução de problemas de negociação de conteúdo e cenários 406.

Melhores Práticas para Lidar com Erros 406

Para Desenvolvedores de Servidor:

  1. Fornecer Informações de Erro Úteis: Ao retornar um 406, sempre inclua informações sobre quais formatos você realmente suporta. Isso ajuda os desenvolvedores de clientes a corrigir suas requisições.
  2. Usar o Cabeçalho Vary: Inclua um cabeçalho Vary: Accept em suas respostas para indicar que o conteúdo da resposta varia com base no cabeçalho Accept. Isso ajuda os sistemas de cache a funcionar corretamente.
  3. Considerar o Comportamento Padrão: Embora a especificação HTTP permita que os servidores retornem uma representação padrão, muitas APIs modernas optam por ser rigorosas e retornar 406 para forçar os clientes a serem explícitos sobre seus requisitos.
  4. Documentar Formatos Suportados: Documente claramente quais tipos de conteúdo sua API suporta para cada endpoint.

Para Desenvolvedores de Cliente:

  1. Ser Flexível nos Cabeçalhos Accept: A menos que você tenha um motivo específico, inclua múltiplos formatos no seu cabeçalho Accept com valores de qualidade apropriados.
  2. Lidar com 406 Graciosamente: Ao receber um 406, verifique a resposta para formatos disponíveis e ajuste sua requisição ou mostre uma mensagem de erro útil ao usuário.
  3. Ter Lógica de Fallback: Considere ter uma lógica de fallback que possa lidar com diferentes formatos se o seu formato preferido principal não estiver disponível.

O Herói Anônimo da Negociação de Conteúdo

O cabeçalho Vary é crucial para o comportamento adequado de cache quando a negociação de conteúdo está envolvida. Quando um servidor inclui Vary: Accept em sua resposta, ele informa aos caches que o conteúdo da resposta depende do valor do cabeçalho Accept.

Isso impede que um cache sirva incorretamente uma resposta JSON a um cliente que solicitou XML, ou vice-versa.

Impacto das Respostas 406 no SEO

Geralmente, o 406 não afeta significativamente o SEO porque os motores de busca geralmente lidam com a negociação de conteúdo de forma robusta e preferem respostas válidas. No entanto, APIs ou sites mal configurados que frequentemente retornam 406 podem frustrar rastreadores ou usuários.

Design Moderno de API e 406

No design moderno de APIs RESTful, o uso do 406 evoluiu:

No entanto, o 406 permanece relevante para:

Solução de Problemas de Erros 406

Considerações de Segurança em Torno do 406

Conclusão: Abraçando o HTTP 406 Not Acceptable para uma Comunicação Precisa

O código de status HTTP 406 Not Acceptable representa um princípio importante da arquitetura web: comunicação clara entre clientes e servidores sobre suas capacidades e requisitos. Não é um erro a ser temido, mas um mecanismo para garantir que a troca de dados ocorra em formatos mutuamente compreensíveis.

Embora você possa não encontrar o 406 diariamente, entendê-lo o torna um melhor cidadão da web. Ele ensina a importância de ser explícito sobre os requisitos de formato de dados e de lidar com a negociação de formato de forma elegante.

Para desenvolvedores de API, implementar corretamente a negociação de conteúdo e as respostas 406 leva a APIs mais robustas e flexíveis. Para desenvolvedores de cliente, entender como trabalhar com erros 406 garante que suas aplicações possam se adaptar a diferentes capacidades do servidor.

Em um mundo onde os dados precisam fluir entre diversos sistemas e plataformas, a capacidade de negociar o formato do conteúdo é mais valiosa do que nunca. E quando você precisa testar e aperfeiçoar essas negociações, uma ferramenta como o Apidog oferece o ambiente perfeito para garantir que suas aplicações se comuniquem de forma eficaz, independentemente das preferências de formato.

botão

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs