Vous consultez la documentation d'Apigee Edge.
Consultez la
documentation Apigee X. en savoir plus
Problème constaté
L'application cliente obtient un code d'état HTTP 502 Bad Gateway
avec le code d'erreur protocol.http.Response405WithoutAllowHeader
comme réponse aux appels d'API.
Message d'erreur
L'application cliente reçoit le code de réponse suivant:
HTTP/1.1 502 Bad Gateway
De plus, le message d'erreur suivant peut s'afficher:
{ "fault":{ "faultstring":"Received 405 Response without Allow Header", "detail":{ "errorcode":"protocol.http.Response405WithoutAllowHeader" } } }
Causes possibles
Cette erreur se produit si le serveur backend répond avec le code d'état 405 Method Not Allowed
sans l'en-tête Allow
.
Conformément à la spécification
RFC 7231, section 6.5.5: 405 Method Not Allowed, le serveur d'origine DOIT générer et envoyer un champ d'en-tête Allow
dans une réponse 405
contenant une liste des méthodes actuellement compatibles avec la ressource cible. Si ce n'est pas le cas, Apigee renvoie 502 Bad Gateway
et le code d'erreur protocol.http.Response405WithoutAllowHeader
.
Cause | Description | Instructions de dépannage applicables |
---|---|---|
Réponse 405 sans l'en-tête "Allow" (Autoriser) du serveur backend | Le serveur backend qui traite la requête API répond avec le code d'état 405 sans l'en-tête Allow . |
Utilisateurs Edge Public and Private Cloud |
Étapes de diagnostic courantes
Utilisez l'un des outils ou techniques suivants pour diagnostiquer cette erreur:
Surveillance des API
Pour diagnostiquer l'erreur à l'aide de la surveillance des API:
- Connectez-vous à l'interface utilisateur Edge en tant qu'utilisateur disposant du rôle approprié.
Accédez à l'organisation dans laquelle vous souhaitez examiner le problème.
- Accédez à la page Analyze > API Monitoring > Investigate (Analyser > Surveillance des API > Enquêter).
- Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
Tracez le code d'erreur par rapport à l'heure.
Sélectionnez une cellule avec le code d'erreur
protocol.http.Response405WithoutAllowHeader
, comme indiqué ci-dessous:Les informations sur le code d'erreur
protocol.http.Response405WithoutAllowHeader
sont affichées comme indiqué ci-dessous:Cliquez sur Afficher les journaux , puis développez l'une des requêtes ayant échoué pour afficher plus d'informations.
- Dans la fenêtre Journaux, notez les détails suivants :
- Code d'état:
502
- Source de l'erreur:
target
- Code d'erreur:
protocol.http.Response405WithoutAllowHeader
.
- Code d'état:
- Si la source d'erreur est
target
et que le code d'erreur estprotocol.http.Response405WithoutAllowHeader
, cela signifie que le serveur backend a répondu avec le code d'état405 Method Not Allowed
sans l'en-têteAllow
.
Outil de traçage
Pour diagnostiquer l'erreur à l'aide de l'outil Trace:
- Activez la
session de trace, puis effectuez l'une des opérations suivantes :
- Attendez que l'erreur
502 Bad Gateway
se produise. - Si vous pouvez reproduire le problème, effectuez un appel d'API pour le reproduire (erreur
502 Bad Gateway
).
- Attendez que l'erreur
Assurez-vous que l'option Show all FlowInfos (Afficher tous 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 localisez l'origine de l'échec.
L'erreur apparaît généralement dans un flux après la phase Request sent to target server (Requête envoyée au serveur cible), comme indiqué ci-dessous:
Notez la valeur de l'erreur dans la trace.
L'exemple de trace ci-dessus affiche l'erreur sous la forme
Received 405 Response without Allow Header
. Étant donné que l'erreur est générée par Apigee après l'envoi de la requête au serveur backend, cela indique que celui-ci a envoyé le code d'état de réponse405
sans l'en-têteAllow
.- Accédez à la phase AX (Données analytiques enregistrées) dans la trace et cliquez dessus.
Faites défiler la page jusqu'à la section Error / Response Headers (En-têtes d'erreur/de réponse) du panneau Phase Details (Détails de la phase), puis déterminez les valeurs de X-Apigee-fault-code et de X-Apigee-fault-source, comme indiqué ci-dessous:
- Les valeurs X-Apigee-fault-code et X-Apigee-fault-source s'afficheront respectivement sous
protocol.http.Response405WithoutAllowHeader
ettarget
, indiquant que cette erreur est causée par le fait que le backend a envoyé le code d'état de la réponse405
sans l'en-têteAllow
.En-têtes de réponse Valeur X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
NGINX
Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX, procédez comme suit:
- Si vous êtes un utilisateur du cloud privé, vous pouvez utiliser les journaux d'accès NGINX pour déterminer les informations essentielles sur les erreurs HTTP
502
. Vérifiez les journaux d'accès NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Où:ORG, ORG et PORT# sont remplacés par des valeurs réelles.
- Recherchez s'il existe des erreurs
502
avec le code d'erreurprotocol.http.Response405WithoutAllowHeader
pendant une durée spécifique (si le problème s'est produit par le passé) ou si des requêtes échouent toujours avec502
. Si vous trouvez des erreurs
502
avec le X-Apigee-fault-code correspondant à la valeur deprotocol.http.Response405WithoutAllowHeader
, déterminez la valeur de la source X-Apigee-fault-code .Exemple d'erreur 502 à partir du journal d'accès NGINX:
L'exemple d'entrée ci-dessus du journal d'accès NGINX contient les valeurs suivantes pour X-Apigee- fault-code et X-Apigee-fault-source :
En-têtes de réponse Valeur X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
Cause: réponse 405 sans l'en-tête "Allow" (Autoriser) du serveur backend
Diagnostic
- Déterminez le code d'erreur et la source d'erreur pour
502 Bad Gateway
à l'aide de la surveillance des API, de l'outil Trace Tool ou des journaux d'accès NGINX, comme expliqué dans la section Étapes de diagnostic courantes. - Si le code d'erreur est
protocol.http.Response405WithoutAllowHeader
et que la source de l'erreur a la valeurtarget
, cela signifie que le serveur backend a répondu avec un code d'état405
sans l'en-têteAllow
. Par conséquent, Apigee répond par502 Bad Gateway
avec le code d'erreurprotocol.http.Response405WithoutAllowHeader
.
Résolution
Pour résoudre le problème, utilisez l'une des méthodes suivantes:
Serveur backend
Option 1 : Corriger le serveur backend pour qu'il envoie un code d'état 405 avec l'en-tête "Allow" (Autoriser)
Assurez-vous que le serveur backend respecte toujours la spécification RFC 7231, section 6.5.5: 405 Method Not Allowed et envoie le code d'état
405
en incluant la liste des méthodes autorisées dans un en-têteAllow
, comme indiqué ci-dessous:Allow: HTTP_METHODS
- Par exemple, si votre serveur backend autorise les méthodes
GET
,POST
etHEAD
, vous devez vous assurer que l'en-têteAllow
les contient comme suit :Allow: GET, POST, HEAD
Gestion des erreurs
Option 2: utilisez la gestion des pannes pour envoyer un code d'état 405 avec l'en-tête "Allow" (Autoriser) à partir de votre proxy d'API:
Si le serveur backend renvoie le code d'état 405
sans l'en-tête Allow
, vous pouvez utiliser la gestion des pannes pour répondre avec le code d'état 405
et l'en-tête Allow
à partir de votre proxy d'API comme suit:
Créez une règle telle qu'une règleAssignMessage ou une règle StrikeFault, puis définissez le code d'état sur
405
avec l'en-têteAllow
et un message personnalisé.Exemple de règle "AssignMessage" pour envoyer une erreur 405 avec l'en-tête "Allow" :
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Créez un
FaultRule
dansTargetEndpoint
, qui appelle la stratégie lorsque l'erreur502
est générée avec le code d'erreurprotocol.http.Response405WithoutAllowHeader
.Exemple de configuration TargetEndpoint affichant FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>
- Enregistrez ces modifications dans une nouvelle révision de votre proxy d'API et déployez la révision.
- Effectuez les appels d'API et vérifiez que vous recevez le code d'état
405
avec l'en-têteAllow
.
Configurer la propriété
Option n° 3: configurez la propriété dans le processeur de messages pour empêcher Apigee Edge de renvoyer l'erreur 502
- Si vous êtes un utilisateur de cloud privé, vous pouvez mettre à jour la propriété
HTTP.ignore.allow_header.for.405
surtrue
pour empêcher Apigee Edge de générer une erreur502
, même si le serveur backend répond par un code d'état405
sans l'en-têteAllow
, à l'aide du guide d'utilisation : Configurer l'en-tête "Ignorer l'autorisation" pour la propriété 405 dans les processeurs de messages. - Si vous êtes un utilisateur de cloud public , veuillez contacter l'assistance Apigee Edge.
Spécification
Apigee attend la réponse 405 Method Not Allowed
du serveur backend avec l'en-tête Allow
, conformément aux spécifications suivantes:
Spécification | |
---|---|
RFC 7231, section 6.5.5: 405 Method Not Allowed | |
RFC 7231, section 7.4.1: Autoriser |
Points clés à noter
La solution recommandée consiste à corriger le serveur backend afin qu'il envoie le code d'état 405
avec l'en-tête Allow
, et à respecter la spécification
RFC 7231, section 6.5.5 : 405 Method Not Allowed (Méthode non autorisée du document RFC 7231, section 6.5.5 : 405 Method Not Allowed).
Si vous avez encore besoin de l'aide de l'assistance Apigee, consultez Vous devez recueillir 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 de cloud public, fournissez les informations suivantes:
- Le nom de l'organisation.
- Nom de l'environnement
- Nom du proxy d'API
- Terminez la commande
curl
permettant de reproduire le502 Bad Gateway
avec le code d'erreurprotocol.http.Response405WithoutAllowHeader
. - Fichier de suivi des requêtes API
Si vous êtes un utilisateur du Private Cloud, fournissez les informations suivantes:
- Message d'erreur complet observé pour les requêtes ayant échoué
- Nom de l'environnement
- Groupe de proxys d'API
- Fichier de suivi des requêtes API
Journaux d'accès NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Où:ORG, ORG 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