Vous consultez la documentation Apigee Edge.
Accédez à la documentation Apigee X.
Problème constaté
L'application cliente reçoit un code d'état HTTP 500 Internal Server Error avec le code d'erreur protocol.http.BadPath en réponse aux appels d'API.
Message d'erreur
L'application cliente reçoit le code de réponse suivant :
HTTP/1.1 500 Internal Server Error
De plus, le message d'erreur suivant peut s'afficher :
{
"fault":{
"faultstring":"Invalid request path",
"detail":{
"errorcode":"protocol.http.BadPath"
}
}
}Causes possibles
Cette erreur se produit si l'URL de requête du serveur backend, représentée par la variable de flux target.url, contient un path commençant par un point d'interrogation (?) au lieu d'une barre oblique (/), ce qui est non valide.
Conformément aux spécifications RFC 3986, section 3: Syntax Components et RFC 3986, section 3.3: Path :
La syntaxe URI comprend les composants suivants :
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment- Le composant
pathest obligatoire et DOIT commencer et toujours comporter une barre oblique (/).
Par conséquent, si l'URL de requête du serveur backend comporte un composant path commençant par un point d'interrogation (?) au lieu d'une barre oblique (/), Apigee Edge répond avec 500 Internal Server Error et le code d'erreur protocol.http.BadPath.
Par exemple, si target.url a la valeur https://www.mocktarget.apigee.net?json, cette erreur se produit, car path est considéré comme non valide, car il commence par un point d'interrogation (?) au lieu d'une barre oblique (/).
| Cause | Description | Instructions de dépannage applicables |
|---|---|---|
| L'URL du serveur backend (target.url) contient un chemin d'accès non valide | Le composant de chemin de l'URL du serveur backend représenté par la variable de flux target.url commence par un point d'interrogation (?) au lieu d'une barre oblique (/). |
Utilisateurs du cloud public et privé Edge |
Étapes de diagnostic courantes
Utilisez l'un des outils/techniques suivants pour diagnostiquer cette erreur :
Surveillance des API
Procédure 1 : Utiliser la surveillance des API
Pour diagnostiquer l'erreur à l'aide d'API Monitoring :
- Connectez-vous à l'UI Apigee Edge en tant qu'utilisateur disposant d'un rôle approprié.
Basculez vers l'organisation dans laquelle vous souhaitez examiner le problème.
- Accédez à la page Analyser > API Monitoring > Examiner.
- Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
Représentez graphiquement Code d'erreur par rapport à Heure.
Sélectionnez une cellule contenant le code d'erreur
protocol.http.BadPath, comme indiqué ci-dessous :
Les informations sur le code d'erreur
protocol.http.BadPaths'affichent comme indiqué ci-dessous :
Cliquez sur Afficher les journaux , puis développez la ligne correspondant à la demande ayant échoué.
- Dans la fenêtre Journaux, notez les informations suivantes :
- Code d'état :
500 - Source de la défaillance :
target - Code d'erreur :
protocol.http.BadPath
- Code d'état :
- Si la Source de la défaillance est
targetet que le Code d'erreur estprotocol.http.BadPath, cela signifie que l'URL du serveur backend comporte un chemin d'accès non valide.
Trace
Procédure 2 : Utiliser l'outil Trace
Pour diagnostiquer l'erreur à l'aide de l'outil Trace :
- Activez la session de trace et l'une des options suivantes :
- Attendez que l'erreur
500 Internal Server Errorse produise. - Si vous pouvez reproduire le problème, effectuez l'appel d'API pour le reproduire.
500 Internal Server Error
- Attendez que l'erreur
Assurez-vous que l'option Afficher toutes les FlowInfos est activée :

- Sélectionnez l'une des requêtes ayant échoué et examinez la trace.
- Parcourez les différentes phases de la trace et identifiez l'emplacement de l'échec.
Vous trouverez généralement l'erreur dans un flux après la phase Target Request Flow Started (Flux de requête cible démarré), comme indiqué ci-dessous :

Notez la valeur de l'erreur à partir de la trace :
error: Invalid request path (Erreur : Chemin de requête non valide)
Étant donné que l'erreur est générée par Apigee Edge après la phase Target Request Flow Started (Début du flux de requête cible), elle indique que l'URL du serveur backend comporte un chemin non valide. Cela se produit généralement si la variable de flux
target.url(qui représente l'URL du serveur backend) dans Apigee Edge a été mise à jour avec un chemin non valide par l'une des règles du flux de requête cible.- Examinez la section Variables lues et attribuées dans chacun des flux en remontant le flux d'erreur jusqu'à la phase Flux de requête cible démarré.
- Déterminez la règle dans laquelle la variable de flux
target.urla été mise à jour :Exemple de trace montrant que la règle JavaScript a mis à jour la variable de flux
target.url:
Dans l'exemple de trace ci-dessus, notez que la valeur de la variable de flux
target.urlest mise à jour dans une règle JavaScript nomméeJS- SetTargetURLcomme suit :target.url : https://mocktarget.apigee.net?json - Notez que la valeur dans
target.urlcomporte les composants suivants :- scheme :
https - authority:
mocktarget.apigee.net - path:
?json
- scheme :
- Étant donné que le composant path commence par un point d'interrogation (
?) au lieu d'une barre oblique (/), vous obtenez l'erreurInvalid request path. - Accédez à la phase AX (données Analytics enregistrées) dans la trace, puis cliquez dessus.
Faites défiler la page jusqu'à la section Détails de la phase > En-têtes d'erreur et déterminez les valeurs de X-Apigee-fault-code et X-Apigee-fault-source, comme indiqué ci-dessous :

Les valeurs de X-Apigee-fault-code et X-Apigee-fault-source sont respectivement
protocol.http.BadPathettarget, ce qui indique que cette erreur est due au fait que l'URL du serveur backend comporte un chemin d'accès non valide.En-têtes de réponse Valeur X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source target
NGINX
Procédure 3 : Utiliser les journaux d'accès NGINX
Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX :
- Si vous êtes un utilisateur Private Cloud, vous pouvez utiliser les journaux d'accès NGINX pour déterminer les informations clés sur HTTP
500 Internal Server Error. Vérifiez les journaux d'accès NGINX :
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Recherchez les éventuelles erreurs
500avec le code d'erreurprotocol.http.BadPathpendant une durée spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec500. Si vous trouvez des erreurs
500avec le code d'erreur X-Apigee correspondant à la valeur deprotocol.http.BadPath, déterminez la valeur de X-Apigee-fault-source.Exemple d'erreur 500 dans le journal d'accès NGINX :
L'exemple d'entrée ci-dessus du journal d'accès NGINX présente les valeurs suivantes pour X-Apigee-fault-code et X-Apigee-fault-source :
En-têtes Valeur X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source targetNotez que les valeurs de X-Apigee-fault-code et X-Apigee-fault-source sont respectivement
protocol.http.BadPathettarget, ce qui indique que cette erreur est due au fait que l'URL du serveur backend comporte un chemin d'accès non valide.
Cause : L'URL du serveur backend (target.url) contient un chemin d'accès non valide.
Diagnostic
- Déterminez le code d'erreur et la source de l'erreur pour
500 Internal Server Errorà l'aide de la surveillance de l'API, de l'outil Trace ou des journaux d'accès NGINX, comme expliqué dans Étapes de diagnostic courantes. - Si le code d'erreur est
protocol.http.BadPathet que la source de l'erreur a la valeurtarget, cela signifie que l'URL du serveur backend comporte un chemin d'accès non valide. L'URL du serveur de backend est représentée par la variable de flux
target.urldans Apigee Edge. Cette erreur se produit généralement si vous essayez de mettre à jour l'URL du serveur backend (target.url) de manière dynamique à l'aide de l'une des règles (dans le flux de proxy/partagé) dans le flux de requête cible, de sorte qu'elle comporte un chemin non valide.Déterminez si la variable de flux
target.urlpossède effectivement un chemin non valide et la source de sa valeur à l'aide de l'une des méthodes suivantes :Trace
Utiliser l'outil Trace
Si vous avez capturé une trace pour cette erreur, suivez les étapes décrites dans Utiliser l'outil Trace et
- Vérifiez si
target.urlcomporte un chemin d'accès non valide, c'est-à-dire s'il commence par un point d'interrogation (?) au lieu d'une barre oblique (/). Si c'est le cas, identifiez la stratégie qui a modifié ou mis à jour la valeur de
target.urlpour qu'elle contienne un chemin d'accès non valide.Exemple de trace montrant que la règle JavaScript a mis à jour la variable de flux
target.url
- Dans l'exemple de trace ci-dessus, notez que la règle JavaScript a modifié ou mis à jour la valeur de
target.urlpour qu'elle contienne un chemin non valide. - Notez que
target.urlcomporte les composants suivants :- scheme :
https - authority:
mocktarget.apigee.net - path:
?json
Le chemin commence par un point d'interrogation (
?) au lieu d'une barre oblique (/), il n'est donc pas valide. - scheme :
Journaux
Utiliser les journaux sur votre serveur de journaux
- Si vous n'avez pas de trace pour cette erreur (problème intermittent), vérifiez si vous avez consigné les informations sur la valeur de la variable de flux
target.urlà l'aide de règles telles que MessageLogging ou ServiceCallout sur votre serveur de journaux. - Si vous disposez des journaux, examinez-les et
- Vérifiez si
target.urlcomporte un chemin d'accès non valide. - Déterminez quelle règle a modifié
target.urlpour qu'il contienne un chemin d'accès non valide.
- Vérifiez si
proxy d'API
Examiner le proxy d'API en échec
Si vous ne disposez pas de trace ni de journaux pour cette erreur, examinez le proxy API défaillant pour déterminer ce qui a modifié ou mis à jour la variable de flux
target.urlafin qu'elle contienne un chemin d'accès non valide. Vérifiez les éléments suivants :- Règle dans le proxy d'API
- Tous les flux partagés appelés à partir du proxy
- Vérifiez si
Examinez attentivement la règle spécifique (par exemple, AssignMessage ou JavaScript) qui modifie ou met à jour la variable de flux
target.url, et déterminez la raison pour laquelletarget.urla été mis à jour avec un chemin d'accès non valide.Voici quelques exemples de règles qui mettent à jour la variable de flux
target.urlde manière incorrecte pour qu'elle contienne un chemin d'accès non valide, ce qui entraîne cette erreur.Exemple 1
Exemple 1 : Mise à jour de la variable
target.urlde la règle JavaScriptvar url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
Dans l'exemple ci-dessus, notez que la variable de flux
target.urlest mise à jour avec la valeurhttps://mocktarget.apigee.net?jsoncontenue dans une autre variableurl..Notez que la valeur de
urlcomporte les composants suivants :- scheme :
https - authority:
mocktarget.apigee.net - path:
?json
Le chemin commence par un point d'interrogation (
?) au lieu d'une barre oblique (/), ce qui est non valide. Par conséquent, Apigee Edge renvoie500 Internal Server Erroravec le code d'erreurprotocol.http.BadPath.Exemple 2
Exemple 2 : Règle JavaScript mettant à jour la variable
target.urlen fonction de la valeur de l'en-tête de requêtevar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Dans l'exemple ci-dessus, notez que la variable de flux
target.urlest mise à jour en concaténant la valeurhttps://mocktarget.apigee.netcontenue dans une variableurlet la valeur d'une autre variablepath, dont la valeur est extraite derequest.header.Path..Si vous avez accès à la requête ou à la trace, vous pouvez vérifier la valeur réelle transmise à
request.header.Path.Exemple de demande effectuée par l'utilisateur
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: ?user"
Dans cet exemple, le chemin d'accès de l'en-tête n'est pas envoyé dans la requête. Par conséquent, la valeur de la variable
pathdans la règle JavaScript estnull.Exemple :
url = https://mocktarget.apigee.net + pathurl = https://mocktarget.apigee.net + "?user"target.url = https://mocktarget.apigee.net?user
Notez que la valeur de
target.urlcomporte les composants suivants :- scheme :
https - authority:
mocktarget.apigee.net - path:
?user
Le chemin commence par un point d'interrogation (
?) au lieu d'une barre oblique (/), ce qui est non valide. Par conséquent, Apigee Edge renvoie500 Internal Server Erroravec le code d'erreurprotocol.http.BadPath.Exemple 3
Exemple 3 : Règle AssignMessage mettant à jour la variable
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>
Notez que la valeur de
urlcomporte les composants suivants :- scheme :
https - authority:
mocktarget.apigee.net - path:
?echo
Dans cet exemple, le chemin d'accès commence par un point d'interrogation (
?) au lieu d'une barre oblique (/), ce qui est non valide. Par conséquent, Apigee Edge renvoie500 Internal Server Erroravec le code d'erreurprotocol.http.BadPath.- scheme :
Solution
Conformément à la spécification des URL
RFC 3986, section 3 : Composants de syntaxe, le composant path est obligatoire et doit toujours commencer par "/". Pour résoudre ce problème, procédez comme suit :
- Assurez-vous que l'URL du serveur backend, représentée par la variable de flux
target.url, comporte toujours un chemin valide et commence toujours par une barre oblique (/).- Dans certains cas, il est possible que vous n'ayez pas de nom de ressource dans le chemin. Dans ce cas, assurez-vous qu'il comporte au moins une barre oblique (
/). - Si vous utilisez d'autres variables pour déterminer la valeur de la variable de flux
target.url, assurez-vous qu'elles ne comportent pas de chemin d'accès non valide. - Si vous effectuez des opérations sur des chaînes pour déterminer la valeur de la variable de flux
target.url, assurez-vous que le résultat de ces opérations ne comporte pas de chemin d'accès non valide.
- Dans certains cas, il est possible que vous n'ayez pas de nom de ressource dans le chemin. Dans ce cas, assurez-vous qu'il comporte au moins une barre oblique (
Dans les exemples ci-dessus, vous pouvez résoudre ce problème comme suit :
Exemple 1
Exemple 1 : Mise à jour de la variable
target.urlde la règle JavaScriptUtilisez une barre oblique (
/) au lieu d'un point d'interrogation (?) dans la variableurlpour résoudre ce problème, comme indiqué ci-dessous :var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
Exemple 2
Exemple 2 : Règle JavaScript mettant à jour la variable
target.urlen fonction de la valeur de l'en-tête de requêtevar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Assurez-vous de transmettre un chemin d'accès valide, par exemple
/user, dans l'en-tête de requêtePathpour résoudre ce problème, comme indiqué ci-dessous :Exemple de requête :
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
Exemple 3
Exemple 3 : Règle AssignMessage mettant à jour la variable
target.urlAjoutez un chemin valide dans l'élément
<Value>de la règle AssignMessage. Autrement dit, remplacez le point d'interrogation (?) par une barre oblique (/) dans l'élément<Value>et définissez-le surhttps://mocktarget.apigee.net/echopour résoudre ce problème, comme indiqué ci-dessous :<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>
Spécification
Apigee Edge s'attend à ce que le composant
pathde l'URL du serveur de backend commence toujours par une barre oblique (/) , conformément aux spécifications suivantes :Spécification RFC 3986, section 3: Syntax Components (en anglais) RFC 3986, section 3.3 : Chemin d'accès Si vous avez encore besoin d'aide de l'assistance Apigee, consultez la page Vous devez collecter des informations de diagnostic.
Vous devez collecter des informations de diagnostic
Si le problème persiste, même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez l'assistance Apigee Edge :
Si vous êtes un utilisateur du cloud public, fournissez les informations suivantes :
- Nom de l'organisation
- Nom de l'environnement
- Nom de proxy d'API
- Commande
curlcomplète utilisée pour reproduire500 Internal Server Erroravec le code d'erreurprotocol.http.BadPath - Fichier de trace pour les requêtes API
Si vous êtes un utilisateur du cloud privé, fournissez les informations suivantes :
- Message d'erreur complet observé pour les requêtes ayant échoué
- Nom de l'environnement
- Bundle de proxy d'API
- Fichier de trace pour les requêtes API
Journaux d'accès NGINX :
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logOù ORG, ENV et PORT# sont remplacés par des valeurs réelles.
- Journaux système du processeur de messages
/opt/apigee/var/log/edge-message- processor/logs/system.log
Références