Você está lendo a documentação do Apigee Edge.
Acesse a documentação da
Apigee X. info
Sintoma
O aplicativo cliente recebe um código de status HTTP 500 Internal Server Error com
o código de erro protocol.http.BadPath como 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ê pode receber a seguinte mensagem de erro:
{
"fault":{
"faultstring":"Invalid request path",
"detail":{
"errorcode":"protocol.http.BadPath"
}
}
}Causas possíveis
Esse erro ocorre se o URL de solicitação do servidor de back-end, representado pela variável de fluxo
target.url,
contiver um path que começa com um ponto de interrogação (?) em vez
de uma barra (/), o que é inválido.
De acordo com as especificações RFC 3986, seção 3: componentes de 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 e sempre ter uma barra (/).
Portanto, se o URL de solicitação do servidor de back-end tiver um componente path que começa com um ponto de interrogação (?) em vez de uma barra (/), o Apigee Edge vai responder com 500 Internal Server Error e o código de erro protocol.http.BadPath.
Por exemplo, se o target.url tiver o valor
https://www.mocktarget.apigee.net?json, esse erro vai ocorrer porque o
path será considerado inválido, já que 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 de 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 uma barra (/). |
Usuários da nuvem pública e privada do Edge |
Etapas comuns do diagnóstico
Use uma das seguintes ferramentas/técnicas para diagnosticar esse erro:
Monitoramento de APIs
Procedimento 1: usar o API Monitoring
Para diagnosticar o erro usando o API Monitoring:
- Faça login na interface do Apigee Edge como um usuário com um papel apropriado.
Mude para a organização em que você quer investigar o problema.
- Acesse a página Analisar > Monitoramento de APIs > Investigar.
- Selecione o período específico em que você observou os erros.
Crie um gráfico com Código de falha e Tempo.
Selecione uma célula com o código de falha
protocol.http.BadPath, conforme mostrado abaixo:
As informações sobre o código de falha
protocol.http.BadPathsão mostradas como 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 de 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 2: usar a ferramenta Trace
Para diagnosticar o erro usando a ferramenta Trace:
- Ative a sessão de rastreamento e uma das seguintes opções:
- Aguarde o erro
500 Internal Server Errorocorrer ou - Se for possível reproduzir o problema, faça a chamada de API para reproduzir o problema
500 Internal Server Error
- Aguarde o erro
Verifique se a opção Mostrar todos os FlowInfos está ativada:

- Selecione uma das solicitações com falha e examine o rastreamento.
- Navegue pelas diferentes fases do rastreamento e localize onde a falha ocorreu.
Normalmente, o erro é encontrado em um fluxo após a fase Fluxo de solicitação de destino iniciado , conforme mostrado abaixo:

Anote o valor do erro no trace:
error: Invalid request path
Como o erro é gerado pelo Apigee Edge após a fase Fluxo de solicitação de destino iniciado, ele indica que o URL do servidor de back-end tem um caminho inválido. Isso provavelmente vai acontecer se a variável de fluxo
target.url(que representa o URL do servidor de back-end) no Apigee Edge tiver sido atualizada com um caminho inválido por uma das políticas no fluxo de solicitação de destino.- Examine a seção Variáveis lidas e atribuídas em cada um dos fluxos de volta 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.urlfoi atualizada:Exemplo de rastreamento mostrando que a política de JavaScript atualizou a variável de fluxo
target.url:
No exemplo de rastreamento mostrado acima, observe que o valor da variável de fluxo
target.urlé atualizado em uma política JavaScript chamadaJS- SetTargetURLda seguinte maneira:target.url : https://mocktarget.apigee.net?json - O valor em
target.urltem os seguintes componentes:- scheme:
https - authority:
mocktarget.apigee.net - path:
?json
- scheme:
- 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 rastreamento e clique nela.
Role a tela para baixo até a seção Detalhes da fase - Cabeçalhos de erro e determine os valores de X-Apigee-fault-code e X-Apigee-fault-source, conforme mostrado abaixo:

Você vai ver os valores de X-Apigee-fault-code e X-Apigee-fault-source como
protocol.http.BadPathetarget, respectivamente, indicando que esse erro é 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 3: usar registros de acesso do NGINX
Para diagnosticar o erro usando registros de acesso do NGINX:
- Se você for um usuário do Private Cloud, poderá usar os registros de acesso do NGINX para determinar as principais informações sobre
500 Internal Server ErrorHTTP. Verifique os registros de acesso do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Pesquise para ver se há erros de
500com o código de erroprotocol.http.BadPathdurante um período específico (se o problema aconteceu no passado) ou se ainda há solicitações com falha em500. Se você encontrar erros de
500com o X-Apigee-fault-code correspondente ao valor deprotocol.http.BadPath, determine o valor de X- Apigee-fault-source.Exemplo de erro 500 do registro de acesso do NGINX:
A entrada de exemplo acima do registro de acesso do NGINX tem os seguintes valores para X-Apigee- fault-code 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 de falha e a origem da falha para
500 Internal Server Errorusando o API Monitoring, a ferramenta Trace ou os registros de acesso 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 caminho inválido. O URL do servidor de back-end é representado pela variável de fluxo
target.urlno Apigee Edge. Esse erro geralmente ocorre se você tentar atualizar o URL do servidor de back-end (target.url) dinamicamente usando qualquer uma das políticas (no fluxo compartilhado/proxy) 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 caminho inválido e a origem do valor dela usando um dos seguintes métodos:Trace
Como usar a ferramenta Trace
Se você capturou um trace desse erro, siga as etapas explicadas em Como 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 (/). Se sim, descubra a política que modificou ou atualizou o valor de
target.urlpara conter um caminho inválido.Exemplo de rastreamento mostrando que a política de JavaScript atualizou a variável de fluxo
target.url
- No rastreamento de exemplo acima, observe que a política do JavaScript modificou ou atualizou o valor de
target.urlpara conter um caminho inválido. - O
target.urltem os seguintes componentes:- scheme:
https - authority:
mocktarget.apigee.net - path:
?json
O caminho começa com um ponto de interrogação (
?) em vez de uma barra (/), portanto, ele é inválido. - scheme:
Registros
Como usar registros no servidor de registros
- Se você não tiver um rastreamento para esse erro (um problema intermitente), verifique se
registrou as informações sobre o valor da variável de fluxo
target.url, usando políticas como MessageLogging ou ServiceCallout no seu servidor de registros. - Se você tiver os registros, analise-os e
- Verifique se
target.urltem um caminho inválido e - Determine qual política modificou
target.urlpara conter um caminho inválido.
- Verifique se
Proxy de API
Analisar o proxy de API com falha
Se você não tiver um rastreamento ou registros desse erro, revise o proxy de API com falha para determinar o que modificou ou atualizou a variável de fluxo
target.urlpara conter um caminho inválido. Verifique se:- A política no proxy de API
- Todos os 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 determine a causa da atualização detarget.urlpara ter um caminho inválido.Confira alguns exemplos de políticas que atualizam a variável de fluxo
target.urlde maneira incorreta para conter um caminho inválido que causa esse erro.Exemplo 1
Exemplo 1: atualização da política de JavaScript da variável
target.urlvar url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
No exemplo acima, observe que a variável de fluxo
target.urlé atualizada com o valorhttps://mocktarget.apigee.net?jsoncontido em outra variávelurl..O valor do
urltem os seguintes componentes:- scheme:
https - authority:
mocktarget.apigee.net - path:
?json
O caminho começa com um ponto de interrogação (
?) em vez de uma barra (/), o que é inválido. Portanto, o Apigee Edge retorna500 Internal Server Errorcom o código de erroprotocol.http.BadPath.Exemplo 2
Exemplo 2: política 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.urlé atualizada concatenando o valorhttps://mocktarget.apigee.netcontido em uma variávelurle o valor de outra variávelpath, cujo valor é recuperado derequest.header.Path.Se você tiver acesso à solicitação ou ao rastreamento 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 de 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 os seguintes componentes:- scheme:
https - authority:
mocktarget.apigee.net - path:
?user
O caminho começa com um ponto de interrogação (
?) em vez de uma barra (/), o que é inválido. Portanto, o Apigee Edge retorna500 Internal Server Errorcom o código de erroprotocol.http.BadPath.Exemplo 3
Exemplo 3: política AssignMessage 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>
O valor de
urltem os seguintes componentes:- scheme:
https - authority:
mocktarget.apigee.net - path:
?echo
Neste exemplo, o caminho começa com um ponto de interrogação (
?) em vez de uma barra (/), o que é inválido. Portanto, o Apigee Edge retorna500 Internal Server Errorcom o código de erroprotocol.http.BadPath.- scheme:
Resolução
De acordo com a especificação de URL
RFC 3986, seção 3: componentes de sintaxe, o componente path é obrigatório
e sempre precisa 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.url, sempre tem um caminho válido e sempre começa com uma barra (/).- Em alguns casos, talvez não haja um nome de recurso no caminho. Nesse caso, verifique se o caminho tem pelo menos uma barra (
/). - Se você usar outras variáveis para determinar o valor da variável de fluxo
target.url, verifique se elas não têm um caminho inválido. - Se você realizar operações de string para determinar o valor da variável de fluxo
target.url, verifique se o resultado ou o resultado das operações de string não tem um caminho inválido.
- Em alguns casos, talvez não haja um nome de recurso no caminho. Nesse caso, verifique se o caminho tem pelo menos uma barra (
Nos exemplos discutidos acima, você pode corrigir esse problema da seguinte forma:
Exemplo 1
Exemplo 1: atualização da política de JavaScript da variável
target.urlUse uma barra (
/) em vez de um ponto de interrogação (?) na variávelurlpara corrigir esse problema, como mostrado abaixo:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
Exemplo 2
Exemplo 2: política 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);
Transmita um caminho válido, por exemplo:
/usercomo parte do cabeçalho de solicitaçãoPathpara corrigir esse problema, conforme mostrado abaixo:Exemplo de solicitação:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
Exemplo 3
Exemplo 3: política AssignMessage atualizando a variável
target.urlAdicione um caminho válido no elemento
<Value>da política AssignMessage. Ou seja, substitua o ponto de interrogação (?) por uma barra (/) no elemento<Value>e defina 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 SEMPRE comece com uma barra (/) , de acordo com as seguintes especificações:Especificação RFC 3986, seção 3: componentes de sintaxe RFC 3986, seção 3.3: caminho Se você ainda precisar de ajuda do suporte da Apigee, acesse Precisa de 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, reúna 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
- 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 as seguintes 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_logEm que: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