415 Tipo de mídia incompatível - Codificação não suportada

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Sintoma

O aplicativo cliente recebe um código de status HTTP de 415 Unsupported Media Type com código de erro protocol.http.UnsupportedEncoding como resposta a chamadas de API.

Mensagem de erro

O aplicativo cliente recebe este código de resposta:

HTTP/1.1 415 Unsupported Media Type

Além disso, talvez você veja uma mensagem de erro semelhante à mostrada abaixo:

{
   "fault":{
      "faultstring":"Unsupported Encoding \"UTF-8\"",
      "detail":{
         "errorcode":"protocol.http.UnsupportedEncoding"
      }
   }
}

Causas possíveis

Esse erro vai ocorrer se o valor do cabeçalho Content-Encoding especificado na solicitação HTTP enviada pelo cliente para a Apigee ou na resposta HTTP enviada pelo servidor de back-end à Apigee não tiver a codificação com suporte, conforme a especificação RFC 7231, seção 6.5.13: 415 tipo de mídia incompatível (em inglês).

As possíveis causas para esse erro são as seguintes:

Causa Descrição Instruções de solução de problemas aplicáveis para
Codificação não compatível usada na solicitação O cabeçalho da solicitação Content-Encoding contém uma codificação que não é compatível com o Apigee Edge. Usuários de nuvens públicas e privadas de borda
Codificação não compatível usada na resposta O cabeçalho de resposta do servidor de back-end Content-Encoding contém uma codificação não compatível com o Apigee Edge. Usuários de nuvens públicas e privadas de borda

Etapas comuns do diagnóstico

Para diagnosticar o erro, você pode usar um dos seguintes métodos:

Monitoramento de APIs

Para diagnosticar o erro usando o monitoramento de APIs:

  1. Faça login na sua conta do Apigee Edge.
  2. Alterne para a organização em que você quer investigar o problema:

    menu suspenso da organização da interface
  3. Navegue até a página Analisar > Monitoramento de API > Investigar.
  4. Selecione o período específico em que você observou os erros.
  5. Verifique se o filtro Proxy está definido como Todos.
  6. Trace o Código de falha em relação a Time.
  7. Selecione uma célula com o código de falha protocol.http.UnsupportedEncoding, conforme mostrado abaixo:

    célula de código de falha selecionada
  8. As informações sobre o código de falha protocol.http.UnsupportedEncoding são mostradas abaixo:

  9. Clique em Ver registros e expanda uma das solicitações que apresentam falha com o erro 415 para ver mais informações:

  10. Na janela Registros, observe os seguintes detalhes:
    • Origem da falha:mostra que o erro é retornado por apigee ou target.
    • Código de falha:precisa corresponder a protocol.http.UnsupportedEncoding.
  11. Se a origem da falha for apigee, isso indica que a solicitação continha codificação sem suporte no cabeçalho Content-Encoding.
  12. Se a origem da falha for target, isso indica que a resposta do servidor de back-end continha codificação não compatível no cabeçalho Content-Encoding.

Ferramenta de rastreamento

Para diagnosticar o erro usando a ferramenta Trace:

  1. Ative a sessão de rastreamento e:
    • Aguarde a ocorrência do erro 415 Unsupported Media Type ou
    • Se você conseguir reproduzir o problema, faça a chamada de API para reproduzir o erro 415 Unsupported Media Type.
  2. Verifique se Mostrar todos os FlowInfos está ativado:

    exibir painel de opções, mostrar todos os flowinfos
  3. Selecione uma das solicitações com falha e examine o rastro.
  4. Navegue pelas diferentes fases do rastro e localize onde a falha ocorreu.
  5. Você vai encontrar o erro normalmente em um fluxo após a fase Solicitação enviada para o servidor de destino, conforme mostrado abaixo:

  6. Observe o valor do erro do trace.

    O trace de amostra acima mostra o erro como Unsupported Encoding "utf-8". Como o erro é gerado pela Apigee depois que a solicitação é enviada ao servidor de back-end, ele indica que o servidor de back-end enviou o cabeçalho de resposta Content-Encoding com o valor de "utf-8", que não é uma codificação compatível na Apigee.

  7. Navegue até a fase AX (Dados do Analytics registrados) no rastreamento e clique nela.
  8. Role para baixo até a seção Cabeçalhos de erro / resposta no painel Detalhes da fase e determine os valores de X-Apigee-fault-code e X-Apigee-fault-source, conforme mostrado abaixo:

  9. Você verá os valores de X-Apigee-fault-code e X-Apigee-fault-source como protocol.http.UnsupportedEncoding e target, indicando que o erro foi causado porque o valor de codificação incompatível de "utf-8" foi transmitido pelo servidor de back-end no cabeçalho de resposta Content-Encoding.

    Cabeçalhos de resposta Valor
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

  10. Verifique se você está usando o encadeamento de proxy, ou seja, se o endpoint/servidor de destino está invocando outro proxy na Apigee.
    1. Para determinar isso, volte para a fase Solicitação enviada para o servidor de destino. Clique em Mostrar curl.

    2. A janela Curl for Request Sent to Target Server será aberta. Nela, é possível determinar o alias do host do servidor de destino.
    3. Se o alias de host do servidor de destino estiver apontando para um alias de host virtual, ele será encadeamento de proxy. Nesse caso, é necessário repetir todas as etapas acima para o proxy encadeado até determinar o que está realmente causando o erro 415 Unsupported Media Type.
    4. Se o alias de host do servidor de destino apontar para o servidor de back-end, isso indica que o servidor de back-end está transmitindo a codificação sem suporte para a Apigee.

Registros de acesso do Nginix

Para diagnosticar o erro usando os registros de acesso do NGINX:

  1. Se você for um usuário da nuvem privada, poderá usar os registros de acesso do NGINX para determinar as principais informações sobre os erros HTTP 415.
  2. Verifique os registros de acesso do NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. Pesquise erros 415 durante uma duração específica (se o problema aconteceu anteriormente) ou se há alguma solicitação com falha com 415.
  4. Se você encontrar erros 415 com o X-Apigee-fault-code correspondente ao valor de protocol.http.UnsupportedEncoding, determine o valor de X-Apigee-fault-source.

    Exemplo de erro 415 do registro de acesso do NGINX:

    A entrada de amostra acima do registro de acesso do NGINX tem os seguintes valores para X- Apigee-fault-code e X-Apigee-fault-source:

    Cabeçalhos de resposta Valor
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source MP

    O X-Apigee-fault-source também pode ter o valor target.

Causa: codificação incompatível na solicitação

Diagnóstico

  1. Determine o código de falha e a origem da falha do erro observado com os registros de acesso do Monitoring da API ou do NGINX, conforme explicado nas etapas comuns de diagnóstico.
  2. Se o Código de falha for protocol.http.UnsupportedEncoding e a Origem da falha tiver o valor apigee ou MP, isso indica que a solicitação enviada pelo aplicativo cliente contém codificação incompatível no cabeçalho da solicitação Content-Encoding.
  3. É possível determinar o valor da codificação sem suporte que é transmitido como parte da solicitação HTTP usando um dos métodos a seguir:

    Mensagem de erro

    Como usar a mensagem de erro:
    1. Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte faultstring. O faultstring contém o valor da codificação final não compatível.

      Exemplo de mensagem de erro:

      "faultstring":"Unsupported Encoding \"UTF-8\""
      
    2. Na mensagem de erro acima, observe que o valor da codificação não compatível é “UTF-8”, conforme visto em faultstring.

      Como “UTF-8” não é uma codificação compatível com o Apigee Edge, essa solicitação falha com o erro 415 Unsupported Media Type com o código de erro: protocol.http.UnsupportedEncoding.

    Solicitação real

    Usando a solicitação real:
    1. Se você não tiver acesso à solicitação real feita pelo aplicativo cliente, acesse Resolução.
    2. Se você tiver acesso à solicitação real feita pelo aplicativo cliente, siga estas etapas:
      1. Determine o valor transmitido ao cabeçalho da solicitação Content-Encoding..
      2. Se o valor transmitido para o cabeçalho da solicitação Content-Encoding não for um dos valores listados em Codificação compatível, essa será a causa do erro.

        Exemplo de solicitação:

        curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: UTF-8" -X POST -d @request_payload.gz
        

        A solicitação de amostra acima envia o valor "UTF-8" para o cabeçalho Content- Encoding, que não é uma codificação compatível na Apigee Edge. Portanto, essa solicitação falha com 415 Unsupported Media Type erro com o código de erro: protocol.http.UnsupportedEncoding.

Resolução

  1. Consulte a lista de codificação aceita pela Apigee em Codificação compatível.
  2. O aplicativo cliente precisa sempre enviar o seguinte:
    • Apenas a codificação compatível como o valor do cabeçalho Content-Encoding na solicitação
    • O payload de solicitação no formato compatível com o Apigee Edge e corresponde ao formato especificado no cabeçalho Content-Encoding
  3. No exemplo acima, o payload da solicitação tem uma extensão gz que indica que o conteúdo precisa ser gzip. Para corrigir o problema, envie o cabeçalho da solicitação como Content-Encoding: gzip e o payload da solicitação no formato gzip:

    curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
    

Causa: codificação incompatível na resposta

Diagnóstico

  1. Determine o código de falha e a origem da falha do erro observado usando o monitoramento da API, a ferramenta de rastreamento ou os registros de acesso do NGINX, conforme explicado nas etapas comuns de diagnóstico.
  2. Se a origem da falha tiver o valor target, isso indica que a resposta enviada pelo servidor de back-end contém codificação não compatível no cabeçalho Content-Encoding.
  3. É possível determinar o valor da codificação sem suporte que é transmitido como parte da resposta HTTP do servidor de back-end usando um dos métodos a seguir:

    Mensagem de erro

    Como usar a mensagem de erro:
    1. Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte faultstring. O faultstring contém o valor da codificação sem suporte.

      Exemplo de mensagem de erro:

      "faultstring":"Unsupported Encoding \"UTF-8\""
      
    2. Na mensagem de erro acima, observe que o valor da codificação não compatível é “UTF-8”, conforme visto em faultstring.

      Como “UTF-8” não é uma codificação compatível com o Apigee Edge, essa solicitação falha com o erro 415 Unsupported Media Type com o código de erro: protocol.http.UnsupportedEncoding.

    Ferramenta de rastreamento

    Como usar o Trace:
    1. Se você não tiver o trace da solicitação com falha, acesse Resolução.
    2. Se você capturou um rastro para a falha, poderá determinar a codificação sem suporte transmitida pelo servidor de back-end como parte do cabeçalho de resposta Content-Encoding, conforme explicado na Ferramenta de rastreamento.

Resolução

  1. Consulte a lista de codificação aceita pela Apigee em Codificação compatível
  2. Verifique se o servidor de back-end sempre envia o seguinte:
    • Apenas a codificação compatível como o valor do cabeçalho Content-Encoding na solicitação
    • O payload de resposta no formato compatível com o Apigee Edge e corresponde ao formato especificado no cabeçalho Content-Encoding

Codificação compatível

A tabela a seguir lista o formato de codificação aceito pelo Apigee Edge:

Cabeçalho Codificação Descrição
Content-Encoding gzip O formato Unix gzip
deflate Esse formato usa a estrutura zlib com o algoritmo de compressão de desinflar.

Especificação

A Apigee responde com a resposta de erro 415 Unsupported Media Type de acordo com a especificação RFC a seguir:

Especificação
RFC 7231, seção 6.5.13: 415 tipo de mídia incompatível (link em inglês)

Pontos principais

Observe o seguinte:

  • Se o erro 415 for retornado pela Apigee devido a uma codificação sem suporte transmitida no cabeçalho Content-Encoding como parte da solicitação de API:
    • Não será possível capturar o rastro para essas solicitações.
    • Não será possível modificar o formato ou o conteúdo da resposta de erro enviada pelo Apigee Edge usando as políticas, como IncreaseFault eAssignMessage.

    Isso ocorre porque esse erro ocorre em uma fase inicial no processador de mensagens, antes que qualquer política possa ser executada.

  • Se o erro 415 for retornado pela Apigee devido a uma codificação sem suporte transmitida no cabeçalho de resposta do servidor de back-end, ele precisa ser corrigido no servidor de back-end para evitar esse erro. Trabalhe com sua equipe de back-end conforme apropriado para corrigir esse problema.

Se você ainda precisar de ajuda do suporte do Apigee Edge, acesse Precisa de informações de diagnóstico.

É necessário coletar informações de diagnóstico

Se você ainda precisar de ajuda do suporte da Apigee, colete as seguintes informações de diagnóstico e entre em contato com o suporte do Apigee Edge:

Se você for um usuário da nuvem pública, forneça as seguintes informações:

  • Nome da organização
  • Nome do ambiente
  • Nome do proxy de API
  • Completar o comando curl usado para reproduzir o erro 415
  • Arquivo de rastreamento das solicitações de API

Se você for um usuário da nuvem privada, forneça as seguintes informações:

  • Concluir a mensagem de erro observada para as solicitações com falha
  • Nome do ambiente
  • Pacote de proxy de API
  • Arquivo de rastreamento das solicitações de API
  • Registros de acesso do NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Onde:ORG, ENV e PORT# são substituídos por valores reais.

  • Registros do sistema do processador de mensagens /opt/apigee/var/log/edge-message- processor/logs/system.log