Configuration de processeurs de message pour autoriser les en-têtes en double

<ph type="x-smartling-placeholder"></ph> Vous consultez la documentation Apigee Edge.
Accédez à la page Documentation sur Apigee X.
En savoir plus

<ph type="x-smartling-placeholder">

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'erreur protocol.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:

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 :

multivalued, allowDuplicate,

<ph type="x-smartling-placeholder">
  1. blank: les en-têtes HTTP en double et les valeurs multiples ne sont pas autorisés.
  2. multiValued: scinde l'en-tête à valeurs multiples en plusieurs en-têtes. Vous pouvez saisir plusieurs valeurs pour les en-têtes HTTP, mais les valeurs en double ne sont pas autorisées. La valeur multiValued est activée, ce qui implique que test-header=a,b serait converti en test-header=a et test-header=b.
  3. allowDuplicate: autorise plusieurs en-têtes HTTP (en double) portant le même nom.
  4. multivalued, allowDuplicate: les valeurs multiples et les doublons sont pour les en-têtes HTTP.

HTTPHeader.HEADER_NAME

Cette propriété permet de remplacer le comportement d'un en-tête spécifique spécifié par HTTPHeader.ANY

<ph type="x-smartling-placeholder">
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.

<ph type="x-smartling-placeholder">

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
  1. 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>
    
  2. 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>
    1. L'en-tête HTTP Connection est écrasé, mais il peut avoir doublons et valeurs multiples
    2. Les en-têtes HTTP Host et Expires sont écrasés et ne peut pas avoir doublons et valeurs multiples
    3. L'en-tête HTTP Date est écrasé et peut avoir des doublons mais pas peut contenir plusieurs valeurs
    4. Tous les en-têtes qui apparaissent ici (Connection, Host, Expires et Date dans l'exemple ci-dessus) sont appelés en-têtes avec une configuration préexistante. document.
    <ph type="x-smartling-placeholder">

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

protocol.http.
DuplicateHeader

En interne, nous avons divisé test-header=a,b en:

  • test-header=a et
  • test-header=b,

L'erreur DuplicateHeader est alors générée.

test‑header=a,b

En interne, nous avons divisé test-header=a,b en:

  • test-header=a et
  • test-header=b,

puis le formulaire d'origine est envoyé à la cible.

test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
test‑header=a
test‑header=b
<ph type="x-smartling-placeholder">

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.

<ph type="x-smartling-placeholder">

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:

  1. <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:

    1. 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.
    2. 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.
    3. 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ête Expires.

  2. 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.
  3. 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
    
  4. Ajoutez une ligne au format suivant:
    conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
    
  5. Enregistrez les modifications.
  6. 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
    
  7. 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

  8. 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.

  1. 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
    
  2. Si la nouvelle valeur est correctement définie pour HTTPHeader.HEADER_NAME sur le processeur de messages, la commande ci-dessus affiche la nouvelle valeur http.properties.
  3. L'exemple de résultat de la commande ci-dessus, une fois que vous avez configuré allowDuplicates et multiValued se présentent comme suit:

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
    
  4. Dans l'exemple de résultat ci-dessus, notez que la propriété HTTPHeader.Expires a été définie avec la nouvelle valeur allowDuplicates, multiValued dans http.properties Cela indique que la règle d'autorisation des doublons valeurs dans HTTPHeader est correctement configurée sur le processeur de messages.
  5. 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.

  6. 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.

<ph type="x-smartling-placeholder">

Dans cette section, nous utiliserons Expires (et myheader) comme exemple. pour lequel nous ne voulons pas autoriser les doublons, comme expliqué ci-dessous:

  1. <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:

    1. 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.
    2. 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.
    3. 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 sur allowDuplicates, multiValued Cela signifie que la propriété est remplacé pour autoriser les valeurs en double ou multiples pour l'en-tête Expires

    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 sur allowDuplicates, multiValued par défaut. Cela implique également que la propriété n'est pas écrasée pour l'en-tête "myheader",

  2. Si vous remarquez l'un des problèmes suivants, effectuez les étapes restantes de cette section: <ph type="x-smartling-placeholder">
      </ph>
    1. 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)
    2. 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.

  3. 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
    
  4. 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=
    
  5. Enregistrez les modifications.
  6. 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
    
  7. 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

  8. 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.

<ph type="x-smartling-placeholder">
  1. 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
    
  2. 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 fichier http.properties.
  3. 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=
    
  4. Dans l'exemple de résultat ci-dessus, notez que la propriété HTTPHeader.Expires ( et HTTPHeader.myheader) a été définie avec la nouvelle valeur {blank} dans http.properties Cela indique que le comportement pour autoriser les doublons et plusieurs valeurs pour l'en-tête HTTP spécifique Expires (et myheader) est désactivé avec succès sur le processeur de messages.
  5. Si l'ancienne valeur de la propriété 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.

    <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.

  6. Si vous ne pouvez toujours pas modifier la propriété, contactez l'assistance Apigee Edge.