<ph type="x-smartling-placeholder"></ph>
Vous consultez la documentation Apigee Edge.
Accédez à la page
Documentation sur Apigee X. En savoir plus
Conformément à la spécification HTTP <ph type="x-smartling-placeholder"></ph> RFC 7230, section 3.2.2: Field Order, Apigee Edge s'attend à ce que la requête HTTP du client ou HTTP du serveur backend ne contiennent pas l'en-tête transmis plusieurs fois avec des valeurs identiques ou différentes, sauf si l'en-tête spécifique comporte une exception et peut avoir des doublons.
Par défaut, Apigee Edge autorise la transmission des doublons et de plusieurs valeurs à la plupart des en-têtes. Toutefois, il n'autorise pas certains en-têtes répertoriés dans En-têtes ne pouvant pas avoir des valeurs en double et plusieurs valeurs. Par conséquent :
- Vous recevrez
400 Bad Request
avec le code d'erreurprotocol.http.DuplicateHeader
si le client envoie une requête HTTP avec une adresse e-mail plusieurs fois ou avec des valeurs multiples pour les en-têtes HTTP, ce qui n'est pas autorisé avoir des doublons/plusieurs valeurs dans Apigee Edge. - De même, vous obtiendrez
502 Bad Gateway
avec un code d'erreur.protocol.http.DuplicateHeader
si le serveur backend envoie une réponse HTTP avec un en-tête particulier plus d'une fois ou avec des valeurs multiples pour les en-têtes HTTP qui ne sont pas autorisé à avoir des doublons ou plusieurs valeurs dans Apigee Edge
La solution recommandée pour résoudre ces erreurs consiste à corriger l'application cliente et le serveur backend ne doivent pas envoyer d'en-têtes en double et respecter la spécification <ph type="x-smartling-placeholder"></ph> RFC 7230, section 3.2.2: Ordre des champs, comme expliqué dans les guides de dépannage suivants:
- <ph type="x-smartling-placeholder"></ph> 400 Bad Request - Duplicate Header (Demande incorrecte 400 - En-tête en double)
- <ph type="x-smartling-placeholder"></ph> 502 Bad Gateway - Duplicate Header (Passerelle incorrecte – En-tête en double)
Toutefois, dans certains cas, vous pouvez ajouter une exception pour inclure les doublons
pour certains en-têtes HTTP. Dans ce cas, vous pouvez autoriser les en-têtes en double et plusieurs
pour un en-tête HTTP spécifique en définissant une propriété HTTPHeader.HEADER_NAME
au niveau du processeur de messages.
Ce document fournit des informations sur cette propriété et explique comment lui permettre d'effectuer les actions suivantes : éviter les erreurs mentionnées ci-dessus et partage les meilleures pratiques à ce niveau.
Propriétés d'en-tête HTTP pour autoriser les doublons et les valeurs multiples
Apigee Edge fournit les deux propriétés suivantes pour contrôler le comportement des autorisations les doublons et les valeurs multiples pour les en-têtes HTTP. Notez que vous ne pouvez les configurer que sur le les processeurs de messages utilisant la syntaxe des jetons expliquée dans Comment configurer Edge.
Nom de propriété | Description | Valeurs autorisées |
---|---|---|
HTTPHeader.ANY |
Cette propriété indique si des valeurs en double ou multiples sont autorisées pour tous les types en-têtes comprenant les en-têtes personnalisés envoyés dans le cadre d'une requête HTTP effectuée par le client envoyée par le serveur backend à Apigee Edge. Valeur par défaut :
|
|
|
Cette propriété permet de remplacer le comportement d'un en-tête spécifique
spécifié par |
Mêmes informations que ci-dessus. |
En-têtes non autorisés à avoir des doublons et des valeurs multiples
Comme expliqué précédemment, Apigee Edge autorise les doublons et plusieurs valeurs pour la plupart des
par défaut. En effet, la propriété HTTPHeader.ANY
est
configuré avec la valeur multivalued, allowDuplicate.
Configuration remplacée
Pour certains en-têtes spécifiques, la configuration par défaut est remplacée par l'un des éléments suivants : méthodes:
HTTPHeader.HEADER_NAME=multivalued, allowDuplicate
Cette configuration ne modifie pas le comportement par défaut. Autrement dit, l'en-tête spécifique peut contenir des doublons et des valeurs multiples.
.HTTPHeader.HEADER_NAME=
Cette configuration modifie le comportement par défaut. Autrement dit, le l'en-tête ne peut pas avoir de doublons et de valeurs multiples.
Déterminer les en-têtes qui ne sont pas autorisés à avoir des doublons et plusieurs valeurs
Cette section explique comment identifier les éléments suivants:
- Les en-têtes spécifiques qui ne peuvent pas avoir des doublons et des valeurs multiples votre configuration de cloud privé Apigee Edge et
- En-têtes spécifiques avec une configuration préexistante
Sur le processeur de messages, recherchez la propriété
HTTPHeader.
dans/opt/apigee/edge-message-processor/conf
comme indiqué ci-dessous:grep -ri "HTTPHeader." /opt/apigee/edge-message-processor/conf
Exemple de résultat :
# grep -ri "HTTPHeader" /opt/apigee/edge-message-processor/conf /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.ANY=allowDuplicates, multiValued /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Connection=allowDuplicates, multiValued … <snipped> /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Host= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Date=allowDuplicates … <snipped>
- Comme expliqué dans la section Configuration écrasée,
Notez les informations suivantes dans l'exemple de résultat ci-dessus:
<ph type="x-smartling-placeholder">
- </ph>
- L'en-tête HTTP
Connection
est écrasé, mais il peut avoir doublons et valeurs multiples - Les en-têtes HTTP
Host
etExpires
sont écrasés et ne peut pas avoir doublons et valeurs multiples - L'en-tête HTTP
Date
est écrasé et peut avoir des doublons mais pas peut contenir plusieurs valeurs - Tous les en-têtes qui apparaissent ici (
Connection
,Host
,Expires
etDate
dans l'exemple ci-dessus) sont appelés en-têtes avec une configuration préexistante. document.
- L'en-tête HTTP
Comportement d'Apigee Edge
Le tableau suivant décrit le comportement d'Apigee Edge lorsque les en-têtes sont envoyés en tant que
des doublons et avec plusieurs valeurs selon la façon dont les propriétés HTTPHeader
sont
configuré sur les processeurs de messages avec un exemple HTTPHeader
de
test-header
Requête | En-têtes sortants basés sur la valeur de conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<Vide> | allowDuplicate | multiValued | allowDuplicate, multiValued (PAR DÉFAUT) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
En interne, nous avons divisé
L'erreur |
En interne, nous avons divisé
puis le formulaire d'origine est envoyé à la cible. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
Avant de commencer
Avant de suivre les étapes décrites dans ce document, assurez-vous de bien comprendre la configuration des propriétés Edge sur Private Cloud, décrit à la section Comment configurer Edge
Configurer allowDuplicates et plusieurs valeurs pour les en-têtes
<ph type="x-smartling-placeholder">Comme expliqué dans la section Propriétés de l'en-tête HTTP pour autoriser les doublons et
plusieurs valeurs,la valeur de la propriété HTTPHeader.ANY = allowDuplicates,
multivalued
implique que tous les en-têtes sont autorisés à avoir des doublons et des valeurs multiples dans
Apigee Edge. Cependant, il existe certains en-têtes dont les valeurs sont écrasées explicitement pour ne pas
autoriser les en-têtes en double ou les valeurs multiples à l'aide de la propriété
HTTPHeader.HEADER_NAME
Cette section explique comment configurer la propriété.
HTTPHeader.HEADER_NAME
pour autoriser les doublons et les valeurs multiples pour tous
ces en-têtes HTTP sur les processeurs de messages, en utilisant le jeton correspondant conformément à la syntaxe
décrit dans la section Comment configurer Edge.
Dans cette section, nous utiliserons Expires
(et myheader
) comme exemple.
pour lequel nous voulons autoriser les valeurs en double et les valeurs multiples, comme expliqué ci-dessous:
- <ph type="x-smartling-placeholder"></ph>
Déterminez la valeur actuelle de la propriété
HTTPHeaderHEADER_NAME
pour s'assurer qu'il n'est pas déjà activé, et qu'il autorise les valeurs en double et multiples à l'aide de la commande suivante:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Par exemple, si vous essayez de définir la propriété pour l'en-tête
Expires
, vérifiez la valeur actuelle du jeton de propriétéHTTPHeader.Expires
sur le message Processeur:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Le résultat de la commande ci-dessus renvoie l'un des résultats suivants:
- Si la propriété est vide, cela implique que la valeur est écrasée (et que cette valeur
est un en-tête avec une configuration préexistante) afin de NE PAS autoriser les en-têtes en double et l'utilisation
valeurs. Autrement dit, vous n'êtes pas autorisé à envoyer l'en-tête
Expires
au-delà de une fois dans la requête ou la réponse HTTP à Apigee. - Il n'y a aucun appel pour la propriété spécifique. Cela signifie donc que cette valeur n'est pas écrasé (et il ne s'agit PAS d'un en-tête avec une configuration préexistante). Cela signifie que l'en-tête spécifique peut être envoyé plusieurs fois (les doublons sont autorisés) dans le cadre la requête ou la réponse HTTP à Apigee Edge.
- La propriété est définie avec la valeur
allowDuplicates, multivalued
, puis cela signifie que la valeur est écrasée explicitement (il s'agit d'un en-tête avec configuration préexistante). Cela signifie que l'en-tête spécifique peut être envoyé plus de une seule fois (les doublons sont autorisés) dans la requête HTTP ou la réponse HTTP à Apigee.
Exemple de résultat de la commande de recherche:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
L'exemple de résultat ci-dessus montre que la propriété
HTTPHeader.Expires
est définie sur vide. Cela signifie que la propriété est remplacée pour ne pas autoriser les doublons ou plusieurs valeurs pour l'en-têteExpires
. - Si la propriété est vide, cela implique que la valeur est écrasée (et que cette valeur
est un en-tête avec une configuration préexistante) afin de NE PAS autoriser les en-têtes en double et l'utilisation
valeurs. Autrement dit, vous n'êtes pas autorisé à envoyer l'en-tête
- Si vous remarquez que la propriété correspondant à l'en-tête spécifique est explicitement remplacé par ne pas autoriser les valeurs en double ou multiples, comme dans l'exemple résultat ci-dessus, alors seulement, effectuez les étapes suivantes. Si ce n'est pas explicitement écrasées, passez les autres étapes de cette section.
- Modifier. S'il n'existe pas, vous pouvez le créer:
/opt/apigee/customer/application/message-processor.properties
Par exemple, pour ouvrir le fichier en utilisant vi, saisissez la commande suivante:
vi /opt/apigee/customer/application/message-processor.properties
- Ajoutez une ligne au format suivant:
conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
- Enregistrez les modifications.
Assurez-vous que le fichier de propriétés appartient à l'utilisateur
apigee
. Si ce n'est pas le cas, exécutez la commande suivante:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
Redémarrez le processeur de messages:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Pour redémarrer sans impact sur le trafic, consultez <ph type="x-smartling-placeholder"></ph> Redémarrage progressif des processeurs de messages sans impact sur le trafic
- Si vous disposez de plusieurs processeurs de messages, répétez les étapes ci-dessus sur tous les Processeurs de messages.
Vérifier que l'en-tête est configuré pour avoir des doublons et plusieurs valeurs
<ph type="x-smartling-placeholder">
Cette section explique comment vérifier que la propriété
HTTPHeader.HEADER_NAME
a été mis à jour pour un en-tête spécifique
avec succès pour autoriser les doublons
sur les processeurs de messages.
Nous utiliserons Expires
comme exemple d'en-tête et vérifierons si la propriété correspondante
HTTPHeader.Expires
a été mis à jour.
Même si vous utilisez le jeton conf_http_HTTPHeader.Expires
pour mettre à jour la valeur sur
le processeur de messages, vous devez vérifier si la propriété HTTPHeader.Expires
a été définie avec la nouvelle valeur.
- Sur le processeur de messages, recherchez la propriété
HTTPHeader.HEADER_NAME
dans la/opt/apigee/edge-message-processor/conf
et vérifiez s'il contient a été définie avec la nouvelle valeur, comme indiqué ci-dessous:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Par exemple, si vous souhaitez vérifier que la propriété
HTTPHeader.Expires
est définie avec la nouvelle valeur, puis exécutez la commande suivante:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Si la nouvelle valeur est correctement définie pour
HTTPHeader.HEADER_NAME
sur le processeur de messages, la commande ci-dessus affiche la nouvelle valeurhttp.properties
. L'exemple de résultat de la commande ci-dessus, une fois que vous avez configuré
allowDuplicates
etmultiValued
se présentent comme suit:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- Dans l'exemple de résultat ci-dessus, notez que la propriété
HTTPHeader.Expires
a été définie avec la nouvelle valeurallowDuplicates, multiValued
danshttp.properties
Cela indique que la règle d'autorisation des doublons valeurs dansHTTPHeader
est correctement configurée sur le processeur de messages. - Si l'ancienne valeur de la propriété
HTTPHeader.HEADER_NAME
s'affiche toujours, Vérifiez ensuite que vous avez suivi toutes les étapes décrites dans Configurer correctement allowDuplicates et valeurs multiples pour les en-têtes Si vous avez manqué une étape, répétez toutes les étapes correctement. <ph type="x-smartling-placeholder">Assurez-vous que vos proxys fonctionnent comme prévu, en particulier s'il existe une logique fonctionnelle pour obtenir et définir les en-têtes dans le proxy.
- Si vous ne pouvez toujours pas modifier la propriété, contactez l'assistance Apigee Edge.
Désactiver allowDuplicates pour les en-têtes
Cette section explique comment configurer la propriété HTTPHeader.{Headername}
pour
ne pas autoriser les valeurs en double et les valeurs multiples pour un en-tête HTTP spécifique dans le message
les processeurs, en utilisant le jeton correspondant conformément à la syntaxe décrite dans
Comment configurer Edge.
Dans cette section, nous utiliserons Expires
(et myheader
) comme exemple.
pour lequel nous ne voulons pas autoriser les doublons, comme expliqué ci-dessous:
- <ph type="x-smartling-placeholder"></ph>
Déterminez la valeur actuelle de la propriété
HTTPHeaderHEADER_NAME
pour vérifier qu'elle n'est pas déjà désactivée afin d'autoriser les doublons et plusieurs valeurs en exécutant la commande suivante:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Par exemple, si vous essayez de définir la propriété pour l'en-tête
Expires
, vérifiez la valeur actuelle du jeton de propriétéHTTPHeader.Expires
sur le processeur de messages:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Le résultat de la commande ci-dessus renvoie l'un des résultats suivants:
- La propriété est vide, ce qui implique que la valeur est écrasée par NOT
pour autoriser les en-têtes en double et les valeurs multiples. Autrement dit, vous n'êtes
pas autorisé à envoyer
l'en-tête
Expires
plusieurs fois dans la requête HTTP ou la réponse HTTP. vers Apigee. - Il n'y a aucun appel pour la propriété spécifique. Cela signifie donc que cette valeur n'est pas écrasé, et il s'agit d'un en-tête NOT avec une configuration préexistante. Cela signifie que l'en-tête spécifique peut être envoyé plusieurs fois (les doublons sont autorisés) dans le cadre de requête ou réponse HTTP à Apigee Edge.
- La propriété est définie avec la valeur
allowDuplicates, multivalued
, alors que signifie que la valeur est écrasée explicitement et qu'il s'agit d'une configuration existante. Toutefois, cela signifie que l'en-tête spécifique peut être envoyé plusieurs fois (les doublons sont autorisé) dans la requête ou la réponse HTTP à Apigee.
Exemple de résultat n° 1
Exemple de résultat 1 de la commande de recherche:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
L'exemple de résultat montre que la propriété
HTTPHeader.Expires
est définie surallowDuplicates, multiValued
Cela signifie que la propriété est remplacé pour autoriser les valeurs en double ou multiples pour l'en-têteExpires
Exemple de résultat 2
Exemple de commande et résultat 2 de la commande de recherche
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
Aucun résultat ne s'affiche, ce qui implique que la propriété
HTTPHeader.myheader
est défini surallowDuplicates, multiValued
par défaut. Cela implique également que la propriété n'est pas écrasée pour l'en-tête "myheader", - La propriété est vide, ce qui implique que la valeur est écrasée par NOT
pour autoriser les en-têtes en double et les valeurs multiples. Autrement dit, vous n'êtes
pas autorisé à envoyer
l'en-tête
- Si vous remarquez l'un des problèmes suivants, effectuez les étapes restantes de cette section:
<ph type="x-smartling-placeholder">
- </ph>
- La propriété correspondant à l'en-tête spécifique est remplacée pour permettre les doublons et les valeurs multiples comme dans l'exemple de résultat n° 1 ci-dessus (en-tête avec configuration préexistante)
- Il n'y a aucun appel pour la propriété correspondant à l'en-tête spécifique, comme dans Exemple de sortie n° 2 ci-dessus (il ne s'agit pas d'un en-tête avec une configuration préexistante)
Sinon, ignorez les étapes restantes de cette section.
- Modifiez le fichier suivant. S'il n'existe pas, vous pouvez le créer.
/opt/apigee/customer/application/message-processor.properties
Par exemple, pour ouvrir le fichier en utilisant vi, saisissez la commande suivante:
vi /opt/apigee/customer/application/message-processor.properties
- Ajoutez une ligne au format suivant au fichier de propriétés:
Configuration préexistante
Scénario 1 : En-tête avec une configuration préexistante
conf_http_HTTPHeader.Expires=
Aucune configuration préexistante
Scénario 2: Pas un en-tête avec une configuration préexistante:
conf/http.properties+HTTPHeader.myheader=
- Enregistrez les modifications.
- Assurez-vous que le fichier de propriétés appartient à l'utilisateur
apigee
. Si ce n'est pas le cas, exécutez la commande suivante:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Redémarrez le processeur de messages:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Pour redémarrer sans impact sur le trafic, consultez <ph type="x-smartling-placeholder"></ph> Redémarrage progressif des processeurs de messages sans impact sur le trafic
- Si vous disposez de plusieurs processeurs de messages, répétez les étapes ci-dessus sur tous les messages Processeurs.
Vérifier que l'en-tête est configuré pour ne pas autoriser les doublons et les valeurs multiples
Cette section explique comment vérifier que la propriété
HTTPHeader.HEADER_NAME
a été mis à jour pour un en-tête spécifique
avec succès pour ne pas autoriser les doublons
sur les processeurs de messages.
Nous utiliserons Expires
(et myheader
) comme exemple d'en-tête et vérifierons si
la propriété HTTPHeader.Expires
correspondante (et
HTTPHeader.myheader
) a été mis à jour.
Sur le processeur de messages, recherchez la propriété
HTTPHeader.HEADER_NAME
dans le répertoire/opt/apigee/edge-message- processor/conf
et vérifiez s'il a été défini avec la nouvelle valeur comme suit : comme indiqué ci-dessous:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Par exemple, si vous souhaitez vérifier que la propriété
HTTPHeader.Expires
est définie sur la nouvelle valeur, vous pouvez exécuter la commande suivante:Configuration préexistante
grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Aucune configuration préexistante
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
- Si la nouvelle valeur d'en-tête HTTP est correctement définie pour
HTTPHeader.HEADER_NAME
I sur le processeur de messages, alors ce qui précède affiche la nouvelle valeur dans le fichierhttp.properties
. - Exemple de résultat de la commande ci-dessus après la désactivation
allowDuplicates
se présente comme suit:Configuration préexistante
Scénario 1: Expiration de l'en-tête (en-tête avec configuration préexistante)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Aucune configuration préexistante
Scénario 2: En-tête myheader (pas un en-tête avec une configuration préexistante)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
- Dans l'exemple de résultat ci-dessus, notez que la propriété
HTTPHeader.Expires
( etHTTPHeader.myheader
) a été définie avec la nouvelle valeur {blank}
danshttp.properties
Cela indique que le comportement pour autoriser les doublons et plusieurs valeurs pour l'en-tête HTTP spécifiqueExpires
(etmyheader
) est désactivé avec succès sur le processeur de messages. Si l'ancienne valeur de la propriété
<ph type="x-smartling-placeholder">HTTPHeader.Expires (or HTTPHeader.myheader)
s'affiche toujours, vérifiez que vous avez suivi toutes les étapes décrites dans Configurer allowDuplicates et plusieurs valeurs pour les en-têtes correctement. Si vous avez manqué une étape, répétez toutes les étapes correctement.Assurez-vous que vos proxys fonctionnent comme prévu, en particulier s'il existe une logique fonctionnelle. pour obtenir et définir les en-têtes dans le proxy.
- Si vous ne pouvez toujours pas modifier la propriété, contactez l'assistance Apigee Edge.