Resposta do servidor 406 Not Acceptable
O que é o código de status 406
O código de status HTTP 406 (Not Acceptable) indica que o servidor não pode gerar uma resposta que seja aceitável conforme os critérios especificados pelo cliente no cabeçalho Accept. Esse problema pode ocorrer por várias razões, como cabeçalhos de requisição incorretos ou a falta de suporte ao formato solicitado do lado do servidor.
Definição e causas principais
- O cliente especifica um ou mais formatos no cabeçalho Accept que não são suportados pelo servidor.
- O servidor não possui os recursos ou a configuração necessária para responder no formato desejado.
- Erros na formação dos cabeçalhos de requisição, resultando em solicitações inválidas.
Situações comuns
Um cliente pode encontrar o código 406 em diversas situações, como:
- Ao solicitar um recurso em um formato que não é suportado pelo servidor.
- Quando um cabeçalho Accept é malformado ou contém valores inválidos.
- Durante a interação com APIs que não têm implementações completas para todos os formatos de resposta.
Diferença entre 406 e outros status
É importante diferenciar o código 406 de outros códigos, como o 415 (Unsupported Media Type), que indica que o servidor não suporta o tipo de mídia transmitido no corpo da requisição, enquanto o 406 se refere a formatos aceitos no cabeçalho Accept.
Exemplos práticos
Exemplo 1: Erro ao solicitar uma imagem em um formato não suportado
Um cliente tenta obter uma imagem no formato WebP, mas o servidor só suporta JPEG e PNG. O cliente recebe um status 406.
Exemplo 2: Erro ao solicitar um documento de texto com um formato inválido
Um cliente envia uma requisição para um documento de texto, especificando um formato "text/xml", mas o servidor só suporta "text/plain". O resultado é um erro 406.
Exemplo 3: Como um cabeçalho Accept incorreto pode causar o status 406
Quando um cliente define o cabeçalho Accept como "application/json, application/xml", mas o servidor só pode retornar "text/", o cliente receberá um status 406.
Correção de erros em várias linguagens de programação
JavaScript (Node.js)
Um exemplo de código que pode resultar em um erro 406:
const http = require('http');
http.get('http://example.com/resource', { headers: { Accept: 'image/webp' } }, (res) => {
if (res.statusCode === 406) {
console.log('Formato não aceito.');
}
});
Para corrigir, verifique e ajuste o cabeçalho Accept:
const validAcceptHeader = 'image/jpeg';
http.get('http://example.com/resource', { headers: { Accept: validAcceptHeader } }, (res) => {
// Manipulação da resposta
});
Python (Flask)
Um exemplo de requisição que pode retornar um status 406:
import requests
response = requests.get('http://example.com/api/resource', headers={'Accept': 'application/xml'})
if response.status_code == 406:
print('Formato não aceito.')
Para corrigir, você pode adicionar suporte ao formato desejado:
@app.route('/api/resource', methods=['GET'])
def resource():
return jsonify(data), 200 # Adicione o suporte para os formatos desejados.
PHP
Um exemplo de código que pode resultar em um erro 406:
$headers = getallheaders();
if (strpos($headers['Accept'], 'image/webp') !== false) {
http_response_code(406);
echo 'Formato não aceito.';
}
Para corrigir, ajuste os cabeçalhos ou configure as rotas para aceitar os formatos:
header('Accept: image/jpeg');
Recomendações para evitar o status 406
- Verifique os cabeçalhos Accept antes de enviar a requisição.
- Configure o servidor para suportar diferentes formatos de resposta.
- Teste as APIs com diversos parâmetros de requisição para garantir compatibilidade.
Uso prático do código de status 406
O status 406 pode ser útil para desenvolvedores, pois fornece feedback sobre a incompatibilidade de formatos. É importante que os usuários de APIs estejam cientes dos formatos aceitos e ajustem suas requisições de acordo.
A correta manipulação dos cabeçalhos Accept garante uma comunicação mais eficiente entre cliente e servidor, minimizando a ocorrência de erros como o 406.
Tabela de códigos de status relacionados
Código | Descrição |
---|---|
406 | Not Acceptable |
415 | Unsupported Media Type |
200 | OK |
Códigos Adicionais
Código | Descrição |
---|---|
406.0 | Não aceitável - O tipo MIME solicitado não é aceitável. |