Conteúdo

    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.

    406 - Not Acceptable

    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:

    1. Ao solicitar um recurso em um formato que não é suportado pelo servidor.
    2. Quando um cabeçalho Accept é malformado ou contém valores inválidos.
    3. 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ódigoDescrição
    406.0Não aceitável - O tipo MIME solicitado não é aceitável.