<ph type="x-smartling-placeholder"></ph>
Vous consultez la documentation Apigee Edge.
Accédez à la page
Documentation sur Apigee X. En savoir plus
Symptôme
L'application cliente reçoit le code d'état HTTP 502 Bad Gateway
avec l'erreur
coder protocol.http.Response405WithoutAllowHeader
en 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
Le message d'erreur suivant peut également 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 l'état 405 Method Not Allowed
.
sans l'en-tête Allow
.
Conformément aux spécifications
<ph type="x-smartling-placeholder"></ph>
RFC 7231, section 6.5.5: 405 Method Not Allowed, le serveur d'origine doit normalement
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 prises en charge pour la ressource cible. Sinon, Apigee répond avec
502 Bad Gateway
et le code d'erreur protocol.http.Response405WithoutAllowHeader
.
Cause | Description | Instructions de dépannage applicables |
---|---|---|
Réponse 405 sans en-tête "Allow" du serveur backend | Le serveur backend qui traite la requête API répond avec le code d'état 405 sans en-tête Allow . |
Utilisateurs Edge de cloud public et privé |
Étapes de diagnostic courantes
Utilisez l'une des techniques ou l'un des outils suivants pour diagnostiquer ce problème:
Surveillance des API
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide de l'API Monitoring, procédez comme suit:
- Connectez-vous à l'interface utilisateur Edge en tant qu'utilisateur avec un rôle approprié.
Accédez à l'organisation dans laquelle vous souhaitez examiner le problème.
- Accédez à Analyser > Surveillance des API > Examiner.
- Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
Représentez le code d'erreur par rapport à l'heure.
<ph type="x-smartling-placeholder">Sélectionnez une cellule contenant le code d'erreur
protocol.http.Response405WithoutAllowHeader
comme indiqué ci-dessous:Informations sur le code d'erreur
protocol.http.Response405WithoutAllowHeader
s'affiche comme suit:Cliquez sur Afficher les journaux et développez l'une des requêtes ayant échoué pour afficher plus d'informations.
- Dans la fenêtre Journaux, notez les détails suivants:
<ph type="x-smartling-placeholder">
- </ph>
- 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 indique que le backend le serveur a répondu avec le code d'état405 Method Not Allowed
, mais le codeAllow
.
Outil Trace
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide de l'outil Trace:
- Activez le
session trace, et soit
<ph type="x-smartling-placeholder">
- </ph>
- Attendez que l'erreur
502 Bad Gateway
se produise. - Si vous pouvez reproduire le problème, effectuez l'appel d'API pour le reproduire.
502 Bad Gateway
erreur
- Attendez que l'erreur
Assurez-vous que l'option Show all FlowInfos (Afficher toutes les infos 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 s'affiche généralement dans un flux après la requête envoyée au serveur cible. comme indiqué ci-dessous:
Notez la valeur de l'erreur à partir de la trace.
L'exemple de trace ci-dessus indique l'erreur sous la forme
Received 405 Response without Allow Header
. Étant donné que l'erreur est signalée par Apigee après l'envoi de la requête au backend indique que le serveur backend a envoyé le code d'état de la réponse405
. sans l'en-têteAllow
.- Accédez à la phase AX (Données analytiques enregistrées) dans la trace, puis cliquez dessus.
Faites défiler la page jusqu'à la section Error / Response Headers (En-têtes d'erreur/de réponse) dans Phase Details (Détails de la phase). et déterminer le de X-Apigee-fault-code et X-Apigee-fault-source, comme indiqué ci-dessous:
- Vous verrez les valeurs de X-Apigee-fault-code et X-Apigee-fault-source par
protocol.http.Response405WithoutAllowHeader
ettarget
, respectivement, indiquant que cette erreur est due au fait que le backend a envoyé 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
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX:
- Si vous êtes un utilisateur du Private Cloud, vous pouvez utiliser les journaux d'accès NGINX pour déterminer
Informations clés 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.
- Effectuez une recherche pour voir s'il existe des erreurs
502
avec un code d'erreurprotocol.http.Response405WithoutAllowHeader
pendant une durée spécifique (si le si le problème s'est produit dans le passé) ou si des requêtes échouent encore502
Si vous trouvez des erreurs
502
avec le code X-Apigee-fault-code correspondant à la deprotocol.http.Response405WithoutAllowHeader
, puis déterminez valeur de X-Apigee-fault-source.Exemple d'erreur 502 dans le 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 en-tête "Allow" du serveur backend
Diagnostic
- Déterminez le code d'erreur et la source du défaut pour
502 Bad Gateway
à l'aide de la surveillance des 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.Response405WithoutAllowHeader
et la source d'erreur ayant la valeurtarget
, cela indique que le serveur backend a a répondu avec un code d'état405
sans l'en-têteAllow
. Par conséquent, Apigee répond avec502 Bad Gateway
avec un code d'erreurprotocol.http.Response405WithoutAllowHeader
Solution
Utilisez l'une des méthodes suivantes pour résoudre le problème:
Serveur backend
Option n°1: modifiez le serveur backend pour qu'il envoie le code d'état 405 avec l'en-tête "Allow" (Autoriser) :
<ph type="x-smartling-placeholder">Assurez-vous que le serveur backend respecte toujours la spécification <ph type="x-smartling-placeholder"></ph> RFC 7231, section 6.5.5: 405 Method Not Allowed et envoie avec l'état
405
. code 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
GET
,POST
etHEAD
, vous devez vous assurer que l'en-têteAllow
contient comme suit:Allow: GET, POST, HEAD
Gestion des erreurs
Option 2: Utiliser Fault Handling pour envoyer le code d'état 405 avec l'en-tête "Allow" (Autoriser) à partir de votre API proxy:
<ph type="x-smartling-placeholder">
Si le serveur backend renvoie le code d'état 405
sans Allow
vous pouvez utiliser la gestion des pannes pour répondre avec le code d'état 405
et le
Allow
de votre proxy d'API comme suit:
Créez une règle telle que Règle "AssignMessage" ou Règle RaiseFault et définissez le code d'état sur
405
avec l'en-têteAllow
et un paramètre .Exemple de règle AffectMessage à envoyer 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 règle. lors de l'obtention de l'erreur502
avec le code d'erreurprotocol.http.Response405WithoutAllowHeader
Exemple de configuration TargetEndpoint montrant 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 obtenez le code d'état
405
avec laAllow
.
Configurer la propriété
Option n°3: configurez la propriété dans le processeur de messages pour empêcher Apigee Edge de renvoyant une erreur 502
- Si vous êtes un utilisateur de Private Cloud, vous pouvez mettre à jour la propriété
HTTP.ignore.allow_header.for.405
àtrue
pour empêcher Apigee Edge de en générant une erreur502
, même si le serveur backend répond par405
. code d'état sans l'en-têteAllow
à l'aide du guide d'utilisation: . Configuration de 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 ainsi que
avec l'en-tête Allow
, conformément aux spécifications suivantes:
Spécification | |
---|---|
<ph type="x-smartling-placeholder"></ph> RFC 7231, section 6.5.5: Méthode 405 non autorisée | |
<ph type="x-smartling-placeholder"></ph> RFC 7231, section 7.4.1: Autoriser |
Points clés à noter
La solution recommandée consiste à corriger le serveur backend pour qu'il envoie le code d'état 405
.
avec l'en-tête Allow
et respecter la spécification
<ph type="x-smartling-placeholder"></ph>
RFC 7231, section 6.5.5: Méthode 405 non autorisée.
Si vous avez encore besoin de l'aide de l'assistance Apigee, consultez doit recueillir des informations de diagnostic.
Vous devez collecter des informations de diagnostic
Si le problème persiste alors que vous avez suivi les instructions ci-dessus, rassemblez les informations suivantes : de diagnostic, puis contactez l'assistance Apigee Edge.
Si vous êtes un utilisateur de cloud public, fournissez les informations suivantes:
- Nom de l'organisation
- Nom de l'environnement
- Nom du proxy d'API
- Exécutez la commande
curl
qui permet 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 en échec
- 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