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 500 Internal Server Error com
o código de erro protocol.http.BadPath como uma resposta para chamadas de API.
Mensagem de erro
O aplicativo cliente recebe o seguinte código de resposta:
HTTP/1.1 500 Internal Server Error
Além disso, você poderá encontrar a seguinte mensagem de erro:
{
"fault":{
"faultstring":"Invalid request path",
"detail":{
"errorcode":"protocol.http.BadPath"
}
}
}Causas possíveis
Esse erro ocorrerá se o URL de solicitação do servidor de back-end, representado pela variável de fluxo
target.url,
contém uma path que começa com um ponto de interrogação (?)
por uma barra (/), o que é inválido.
De acordo com as especificações Seção 3 do RFC 3986: componentes da sintaxe e RFC 3986, seção 3.3: caminho:
A sintaxe de URI tem os seguintes componentes:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment- O componente
pathé obrigatório e PRECISA começar com e sempre tenha uma barra (/).
Portanto, se o URL de solicitação do servidor de back-end tiver um componente path começando
com um ponto de interrogação (?) em vez de uma barra (/), a Apigee
O Edge responde com 500 Internal Server Error e um código de erro.
protocol.http.BadPath.
Por exemplo: se target.url tiver o valor
https://www.mocktarget.apigee.net?json, esse erro vai ocorrer à medida que
path é inválido porque começa com um ponto de interrogação
(?) em vez de uma barra (/).
| Causa | Descrição | Instruções de solução de problemas aplicáveis para |
|---|---|---|
| O URL do servidor de back-end (target.url) tem um caminho inválido | O componente do caminho no URL do servidor de back-end representado pela variável de fluxo
target.url começa com um ponto de interrogação (?) em vez de um avanço
(/). |
Usuários de nuvem pública e privada de borda |
Etapas comuns do diagnóstico
Use uma das seguintes ferramentas/técnicas para diagnosticar esse erro:
Monitoramento de APIs
Procedimento no 1: como usar o monitoramento de APIs
Para diagnosticar o erro usando a API Monitoring:
- Faça login na interface do Apigee Edge como usuário com um para o papel apropriado.
Alterne para a organização na qual você deseja investigar o problema.
- Navegue até o menu Analisar > Monitoramento de APIs > Investigar.
- Selecione o período específico em que você observou os erros.
Compare Código de falha com Time.
Selecione uma célula que tenha o código de falha
protocol.http.BadPath, conforme mostrado abaixo:
As informações sobre o código de falha
protocol.http.BadPathsão exibidas como mostrados abaixo:
Clique em Ver registros e expanda a linha da solicitação com falha.
- Na janela Registros, observe os seguintes detalhes:
- Código de status:
500 - Origem da falha:
target - Código da falha:
protocol.http.BadPath
- Código de status:
- Se a Origem da falha for
targete o Código da falha forprotocol.http.BadPath, isso indica que o URL do servidor de back-end tem um caminho inválido.
Trace
Procedimento no 2: como usar a ferramenta Trace
Para diagnosticar o erro usando a ferramenta Trace:
- Ative a sessão de rastreamento e
- Aguarde a ocorrência do erro
500 Internal Server Errorou - Se você puder reproduzir o problema, faça a chamada de API para reproduzir o problema
500 Internal Server Error
- Aguarde a ocorrência do erro
Verifique se Mostrar todos os FlowInfos está ativado:

- Selecione uma das solicitações com falha e examine o trace.
- Navegar pelas diferentes fases do trace e localizar onde a falha ocorreu.
Normalmente, o erro está em um fluxo após o início do fluxo de solicitação de destino . fase, conforme mostrado abaixo:

Observe o valor do erro no trace:
error: Caminho da solicitação inválido
Como o erro é gerado pelo Apigee Edge após o fluxo de solicitação de destino iniciado indica que o URL do servidor de back-end tem um caminho inválido. Isso provavelmente acontecerá se a variável de fluxo
target.url(que representa o URL para o servidor de back-end) no Apigee Edge possivelmente foi atualizado com um caminho inválido por meio de uma das políticas no fluxo de solicitações de destino.- Examine a seção Variáveis lidas e atribuídas em cada fluxo de trás para frente do fluxo de erro para a fase Fluxo de solicitação de destino iniciado.
- Determine a política em que a variável de fluxo
target.urlestava atualizado em:Exemplo de trace mostrando que a política JavaScript atualizou a variável de fluxo
target.url:
No trace de amostra mostrado acima, observe o valor da variável de fluxo
target.urlfoi atualizado em uma política de JavaScript chamadaJS- SetTargetURLda seguinte maneira:target.url : https://mocktarget.apigee.net?json - O valor em
target.urltem estes componentes:- esquema:
https - autoridade:
mocktarget.apigee.net - caminho:
?json
- esquema:
- Como o componente path começa com um ponto de interrogação (
?) em vez de uma barra (/), você recebe o erroInvalid request path. - Navegue até a fase AX (dados do Analytics registrados) no trace e clique nela.
Role para baixo até a seção Detalhes da fase - Cabeçalhos de erro e determine as de X-Apigee-fault-code e X-Apigee-fault-source, conforme mostrado abaixo:

Você vai encontrar os valores de X-Apigee-fault-code e X-Apigee-fault-source como
protocol.http.BadPathetarget, respectivamente, indicando que esse erro foi causado porque o URL do servidor de back-end tem um caminho inválido.Cabeçalhos de resposta Valor X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source target
NGINX
Procedimento no 3: como usar registros de acesso do NGINX
Para diagnosticar o erro usando registros de acesso do NGINX:
- Se você for um usuário da nuvem privada, poderá usar os registros de acesso do NGINX para determinar
as principais informações sobre o
500 Internal Server Errordo HTTP. Verifique os registros de acesso do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Pesquise se há algum erro
500com o código de erro.protocol.http.BadPathdurante um período específico (se o problema tiver acontecido no anterior) ou se ainda há solicitações falhando com500. Se você encontrar erros
500com a correspondência X-Apigee-fault-code o valor deprotocol.http.BadPath, depois determine o valor da expressão X- Apigee-fault-source.Exemplo de erro 500 do registro de acesso do NGINX:
O exemplo de entrada do registro de acesso do NGINX acima tem os seguintes valores para X-Apigee- código de falha e X-Apigee-fault-source:
Cabeçalhos Valor X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source targetOs valores de X-Apigee-fault-code e X-Apigee-fault-source são
protocol.http.BadPathetarget, respectivamente, indicando que esse erro é causado porque o URL do servidor de back-end tem um caminho inválido.
Causa: o URL do servidor de back-end (target.url) tem um caminho inválido
Diagnóstico
- Determine o código da falha e a origem da falha do
500 Internal Server Errorusando os registros de acesso do API Monitoring, da ferramenta Trace ou do NGINX, conforme explicado em Etapas comuns de diagnóstico. - Se o Código da falha for
protocol.http.BadPathe a Origem da falha tiver o valortarget, isso indica que o URL do servidor de back-end tem um objeto invalid caminho de conversão. O URL do servidor de back-end é representado pela variável de fluxo
target.urlna Apigee Borda Esse erro normalmente acontece quando você tenta atualizar o URL do servidor de back-end. (target.url) dinamicamente usando qualquer uma das políticas (dentro de proxy/fluxo compartilhado) no fluxo de solicitação de destino, de modo que ele tenha um caminho inválido.Determine se a variável de fluxo
target.urlrealmente tem um erro inválido path e a origem do valor usando um dos seguintes métodos:Trace
Como usar a ferramenta Trace
Se você capturou um rastro para esse erro, use as etapas explicadas em Usar a ferramenta Trace e
- Verifique se
target.urltem um caminho inválido, ou seja, se ele começa com um ponto de interrogação (?) em vez de uma barra (/). Em caso afirmativo, descubra a política que modificou ou atualizou o valor de
target.urlconter um caminho inválido.Exemplo de trace mostrando que a política JavaScript atualizou a variável de fluxo
target.url
- No trace de amostra acima, observe que a política de JavaScript modificou ou atualizou o valor de
target.urlpara conter um caminho inválido. - O
target.urltem estes componentes:- esquema:
https - autoridade:
mocktarget.apigee.net - caminho:
?json
O caminho começa com um ponto de interrogação (
?) em vez de um barra (/), portanto, é inválida. - esquema:
Registros
Como usar registros no servidor de registros
- Se não houver rastreamento para esse erro (um problema intermitente), verifique se
você registrou as informações sobre o valor da variável de fluxo
target.url, com o uso de políticas como MessageLogging ou Service callout ao seu servidor de registros. - Se você tiver os registros, revise-os
- Verifique se
target.urltem um caminho inválido. - Veja se é possível determinar as informações sobre qual política foi modificada
target.urldeve conter um caminho inválido
- Verifique se
Proxy de API
Como analisar o proxy de API com falha
Se você não tiver um trace ou registros para esse erro, revise a API com falha proxy para determinar o que modificou ou atualizou a variável de fluxo
target.urlconter um caminho inválido. Verifique os seguintes itens:- A política no proxy de API
- Quaisquer fluxos compartilhados invocados do proxy
- Verifique se
Examine cuidadosamente a política específica (por exemplo: AssignMessage ou JavaScript) que modifica ou atualiza a variável de fluxo
target.urle determina a causa atualizandotarget.urlpara ter um caminho inválido.Confira alguns exemplos de políticas que atualizam a variável de fluxo
target.urlpara conter um caminho inválido que leva a esse erro.Amostra 1
Exemplo 1: política de JavaScript atualizando a variável
target.urlvar url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
No exemplo acima, a variável de fluxo
target.urlé atualizada com o valorhttps://mocktarget.apigee.net?jsoncontido em outro variávelurl.O valor de
urltem estes componentes:- esquema:
https - autoridade:
mocktarget.apigee.net - caminho:
?json
O caminho começa com um ponto de interrogação (
?) em vez de uma barra (/), que é inválida. Assim, o Apigee Edge retorna500 Internal Server Errorcom o código de erroprotocol.http.BadPath.Amostra 2
Exemplo 2: política de JavaScript atualizando a variável
target.urlcom base no valor do cabeçalho da solicitaçãovar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
No exemplo acima, observe que a variável de fluxo
target.urlfoi atualizada concatenando o valorhttps://mocktarget.apigee.netcontido em umurle o valor de outra variávelpath, cujo valor é recuperado derequest.header.Path.Se você tiver acesso à solicitação ou ao trace real, poderá verificar o valor real transmitido para
request.header.Path.Exemplo de solicitação feita pelo usuário
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: ?user"
Neste exemplo, o caminho do cabeçalho não é enviado como parte da solicitação. Portanto, o valor da variável
pathna política JavaScript énull.Então:
url = https://mocktarget.apigee.net + pathurl = https://mocktarget.apigee.net + "?user"target.url = https://mocktarget.apigee.net?user
O valor de
target.urltem estes componentes:- esquema:
https - autoridade:
mocktarget.apigee.net - caminho:
?user
O caminho começa com um ponto de interrogação (
?) em vez de uma barra (/), que é inválida. Portanto, a Apigee Edge retorna500 Internal Server Errorcom o código de erroprotocol.http.BadPath.Amostra 3
Exemplo 3: política AttributionMessage atualizando a variável
target.url<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net?echo</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Observe que o valor de
urltem os seguintes componentes:- esquema:
https - autoridade:
mocktarget.apigee.net - caminho:
?echo
Novamente neste exemplo, o caminho começa com um ponto de interrogação (
?). em vez de uma barra (/), que é inválida. Portanto, O Apigee Edge retorna500 Internal Server Errorcom código de erroprotocol.http.BadPath.- esquema:
Resolução
De acordo com a especificação do URL
RFC 3986, seção 3: componentes de sintaxe, o componente path é obrigatório.
e PRECISA sempre começar com "/". Siga as etapas abaixo para corrigir esse problema:
- Verifique se o URL do servidor de back-end, representado pela variável de fluxo
target.urlsempre tem um caminho válido e sempre começa com um (/).- Em alguns casos, pode não haver um nome de recurso no caminho, então certifique-se de que o
o caminho tenha pelo menos uma barra (
/). - Se você usa outras variáveis para determinar o valor da variável de fluxo
target.urle, em seguida, verifique se outras variáveis não têm um caminho inválido. - Se você executar qualquer operação de string para determinar o valor da variável de fluxo
target.url, depois verifique se o resultado ou resultado da string operações não têm um caminho inválido.
- Em alguns casos, pode não haver um nome de recurso no caminho, então certifique-se de que o
o caminho tenha pelo menos uma barra (
Nos exemplos discutidos acima, você pode corrigir esse problema conforme explicado abaixo:
Amostra 1
Exemplo 1: política de JavaScript atualizando a variável
target.urlUse uma barra (
/) em vez de um ponto de interrogação (?) naurlpara corrigir esse problema, conforme mostrado abaixo:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
Amostra 2
Exemplo 2: política de JavaScript atualizando a variável
target.urlcom base no valor do cabeçalho da solicitaçãovar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Verifique se você está transmitindo um caminho válido, por exemplo:
/usercomo parte da solicitação cabeçalhoPathpara corrigir esse problema, conforme mostrado abaixo:Exemplo de solicitação:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
Amostra 3
Exemplo 3: política AttributionMessage atualizando a variável
target.urlAdicione um caminho válido no elemento
<Value>da políticaAssignMessage. Ou seja, substitua o ponto de interrogação (?) por um barra (/) no elemento<Value>e defina-o comohttps://mocktarget.apigee.net/echopara corrigir esse problema, conforme mostrado abaixo:<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net/echo</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Especificação
O Apigee Edge espera que o
pathcomponente no URL do servidor de back-end PRECISA sempre começar com uma barra (/) da seguinte forma: especificações:Especificação Seção 3 do RFC 3986: componentes da sintaxe RFC 3986, seção 3.3: caminho Se você ainda precisar de ajuda do suporte da Apigee, acesse Precisa coletar informações de diagnóstico.
É necessário coletar informações de diagnóstico
Se o problema persistir mesmo depois de seguir as instruções acima, colete 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
curlcompleto usado para reproduzir o500 Internal Server Errorcom o código de erroprotocol.http.BadPath - 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_logOnde: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
Referências