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

Esta é a documentação do Apigee Edge.
Acesse 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 uma resposta às chamadas de API.

Mensagem de erro

O aplicativo cliente recebe o seguinte código de resposta:

HTTP/1.1 415 Unsupported Media Type

Além disso, uma mensagem de erro semelhante a esta pode aparecer:

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

Causas possíveis

Esse erro ocorrerá se o valor do cabeçalho Content-Encoding especificado no a solicitação HTTP enviada pelo cliente para a Apigee ou a resposta HTTP enviada pelo servidor de back-end para A Apigee não tem as codificação compatível com a Apigee, de acordo com a especificação RFC 7231, seção 6.5.13: 415 Tipo de mídia incompatível.

Estas são as possíveis causas desse erro:

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

Etapas comuns do diagnóstico

Para diagnosticar o erro, é possível usar qualquer um dos seguintes métodos:

Monitoramento de APIs

Para diagnosticar o erro usando a API Monitoring:

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

    menu suspenso da organização da interface
  3. Navegue até o menu Analisar > Monitoramento de APIs > 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. Compare Código de falha com Time.
  7. Selecione uma célula que tenha 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 exibidas conforme mostrado abaixo:

  9. Clique em Ver registros e expanda uma das solicitações que falham com 415. para visualizar 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 da falha:precisa corresponder a protocol.http.UnsupportedEncoding.
  11. Se a Fault Source 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 o servidor de back-end resposta continha codificação sem suporte no cabeçalho Content-Encoding.

Ferramenta Trace

Para diagnosticar o erro usando a ferramenta Trace:

  1. Ative o sessão de trace e:
    • Aguarde a ocorrência do erro 415 Unsupported Media Type ou
    • Se você puder reproduzir o problema, faça a chamada de API para reproduzir 415 Unsupported Media Type erro.
  2. Verifique se a opção Show all FlowInfos está ativada:

    ver painel de opções, mostrar todos os flowinfos
  3. Selecione uma das solicitações com falha e examine o trace.
  4. Navegar pelas diferentes fases do trace e localizar onde a falha ocorreu.
  5. Você encontrará o erro normalmente em um fluxo após a solicitação Request enviada ao destino servidor, conforme mostrado abaixo:

  6. Anote o valor do erro do trace.

    O rastro de amostra acima mostra o erro como Unsupported Encoding "utf-8". Como o erro for gerado pela Apigee após o envio da solicitação ao servidor de back-end, isso indica que o servidor de back-end enviou o cabeçalho de resposta Content-Encoding com o valor de "utf-8", o que não é um codificação compatível na Apigee.

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

  9. Os valores de X-Apigee-fault-code e X-Apigee-fault-source vão aparecer como protocol.http.UnsupportedEncoding e target, indicando que esta é causado porque o valor de codificação incompatível de "utf-8" foi transmitido pelo 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 encadeamento de proxy ou seja, se o servidor de destino/endpoint de destino está invocando outro proxy na Apigee.
    1. Para determinar isso, volte para a fase Solicitação enviada ao servidor de destino. Clique em Mostrar curl.

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

Registros de acesso do Nginix

Para diagnosticar o erro usando 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 erros HTTP 415.
  2. Verifique os registros de acesso do NGINX:

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

  3. Pesquisar erros 415 durante um período específico (se o problema tiver acontecido) no passado) ou se ainda há solicitações falhando com 415.
  4. Se você encontrar erros 415 com a correspondência X-Apigee-fault-code o valor de protocol.http.UnsupportedEncoding, depois determine o valor do grupo X-Apigee-fault-source.

    Exemplo de erro 415 do registro de acesso do NGINX:

    O exemplo de entrada do registro de acesso do NGINX acima 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 poderia ter oX-Apigee-fault-source valorX-Apigee-fault-source

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

Diagnóstico

  1. Determine o código da falha e a fonte da falha do erro observado usando a API registros de acesso do Monitoring ou do NGINX, conforme explicado em Etapas comuns de diagnóstico.
  2. Se o Código da falha for protocol.http.UnsupportedEncoding e o Código da falha Source tem o valor apigee ou MP, o que indica que o a solicitação enviada pelo aplicativo cliente contém uma codificação não suportada no cabeçalho da solicitação Content-Encoding.
  3. É possível determinar o valor de codificação não compatível passada como parte da solicitação HTTP usando um dos seguintes métodos:

    Mensagem de erro

    Usar a mensagem de erro:
    1. Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte ao faultstring. O campo faultstring contém o valor do atributo programação.

      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 mostrado em faultstring.

      Como “UTF-8” não é uma codificação compatível com a Apigee Edge, esta 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, execute a etapas a seguir:
      1. Determine o valor transmitido ao cabeçalho da solicitação Content-Encoding.
      2. Se o valor transmitido ao cabeçalho da solicitação Content-Encoding não for um dos valores listados em Codificação compatível, a causa desse erro.

        Exemplo de solicitação:

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

        O exemplo de solicitação acima envia o valor "UTF-8" para o cabeçalho Content- Encoding, que não é um Codificação com suporte no Apigee Edge. Portanto, a solicitação falha com o erro 415 Unsupported Media Type, que contém o código de erro: protocol.http.UnsupportedEncoding.

Resolução

  1. Consulte a lista de codificação com suporte da Apigee em Codificação compatível.
  2. Verifique se o aplicativo cliente sempre envia o seguinte:
    • Somente a codificação compatível como o valor do cabeçalho Content-Encoding em a solicitação
    • O payload da solicitação no formato compatível para 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 sem suporte na resposta

Diagnóstico

  1. Determine o código da falha e a fonte da falha do erro observado usando a API do Monitoring, da ferramenta Trace ou do NGINX, conforme explicado em Etapas comuns de diagnóstico.
  2. Se a Origem da falha tiver o valor target, isso indica que o a resposta enviada pelo servidor de back-end contém codificações sem suporte no Content-Encoding.
  3. É possível determinar o valor de codificação não compatível passada como parte da resposta HTTP do o servidor de back-end usando um destes métodos:

    Mensagem de erro

    Usar a mensagem de erro:
    1. Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte o faultstring. O faultstring contém o valor do 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 mostrado em faultstring.

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

    Ferramenta Trace

    Como usar o Trace:
    1. Se você não tiver o rastreamento da solicitação com falha, acesse Resolução.
    2. Se você capturou um rastro da falha, pode determinar os arquivos codificação transmitida pelo servidor de back-end como parte da resposta Content-Encoding conforme explicado na Ferramenta de rastreamento.

Resolução

  1. Consulte a lista de codificação com suporte da Apigee em Codificação compatível
  2. Verifique se o servidor de back-end sempre envia o seguinte:
    • Somente a codificação compatível como o valor da 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 com suporte

A tabela a seguir lista o formato de codificação compatível com o 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 redução de compactação.

Especificação

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

Especificação
RFC 7231, seção 6.5.13: tipo de mídia 415 incompatível

Pontos principais a observar

Observe o seguinte:

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

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

  • Se o erro 415 for retornado pela Apigee devido à transmissão sem suporte da codificação no cabeçalho de resposta do servidor de back-end, ele terá que ser corrigido em 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 É necessário coletar informações de diagnóstico.

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

Se você ainda precisar de ajuda do suporte da Apigee, reúna as seguintes informações: 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 da API
  • Comando curl completo usado para reproduzir o erro 415
  • Arquivo de rastreamento para as solicitações de API

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

  • Mensagem de erro completa observada para as solicitações com falha
  • Nome do ambiente
  • Pacote de proxy de API
  • Arquivo de rastreamento para as 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