

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# En-têtes HTTP et Application Load Balancers
<a name="x-forwarded-headers"></a>

Les demandes HTTP et les réponses HTTP utilisent des champs d'en-tête pour envoyer des informations concernant les messages HTTP. Les en-têtes HTTP sont ajoutés automatiquement. Les champs d'en-tête sont des paires nom-valeur dont les noms et les valeurs sont séparés par un signe deux points, et qui sont séparées entre elles par un retour chariot (CR) et un saut de ligne (LF). Un ensemble standard de champs d'en-tête HTTP est défini dans la section du RFC 2616 concernant les [en-têtes de message](https://datatracker.ietf.org/doc/html/rfc2616). Il existe également des en-têtes HTTP non standard qui sont automatiquement ajoutés et largement utilisés par les applications. Certains des en-têtes HTTP non standard ont un préfixe `X-Forwarded`. Les Application Load Balancers prennent en charge les en-têtes `X-Forwarded` suivants.

Pour plus d'informations sur les connexions HTTP, consultez la section [Demande de routage](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html#request-routing) dans le *Guide de l'utilisateur Elastic Load Balancing*.

**Topics**
+ [X-Forwarded-For](#x-forwarded-for)
+ [X-Forwarded-Proto](#x-forwarded-proto)
+ [X-Forwarded-Port](#x-forwarded-port)

## X-Forwarded-For
<a name="x-forwarded-for"></a>

L'en-tête de demande `X-Forwarded-For` vous aide à identifier l'adresse IP d'un client lorsque vous utilisez un équilibreur de charge HTTP ou HTTPS. Comme les équilibreurs de charge interceptent le trafic entre les clients et les serveurs, vos journaux d'accès au serveur ne contiennent que l'adresse IP de l'équilibreur de charge. Pour voir l'adresse IP du client, utilisez l'attribut `routing.http.xff_header_processing.mode`. Cet attribut vous permet de modifier, de préserver ou de supprimer l'en-tête `X-Forwarded-For` dans la demande HTTP avant que l'Application Load Balancer n'envoie la demande à la cible. Les valeurs possibles pour cet attribut sont `append`, `preserve` et `remove`. La valeur par défaut de cet attribut est `append`.

**Important**  
L'`X-Forwarded-For`en-tête doit être utilisé avec prudence en raison des risques de sécurité potentiels. Les entrées ne peuvent être considérées comme fiables que si elles sont ajoutées par des systèmes correctement sécurisés au sein du réseau.

**Topics**
+ [Ajout](#x-forwarded-for-append)
+ [Préserver](#x-forwarded-for-preserve)
+ [Supprimer](#x-forwarded-for-remove)

### Ajout
<a name="x-forwarded-for-append"></a>

Par défaut, l'Application Load Balancer stocke l'adresse IP du client dans l'en-tête de demande `X-Forwarded-For` et transmet l'en-tête à votre serveur. Si l'en-tête de demande `X-Forwarded-For` n'est pas inclus dans la demande d'origine, l'équilibreur de charge en crée un avec l'adresse IP du client comme valeur de la demande. Sinon, l'équilibreur de charge ajoute l'adresse IP du client à l'en-tête existant, puis transmet l'en-tête à votre serveur. L'en-tête de demande `X-Forwarded-For` peut contenir plusieurs adresses IP séparées par des virgules.

L'en-tête de demande `X-Forwarded-For` a le format suivant :

```
X-Forwarded-For: client-ip-address
```

Voici un exemple d'en-tête de demande `X-Forwarded-For` pour un client avec l'adresse IP `203.0.113.7`.

```
X-Forwarded-For: 203.0.113.7
```

Voici un exemple d'en-tête de `X-Forwarded-For` demande pour un client dont l' IPv6 adresse est`2001:DB8::21f:5bff:febf:ce22:8a2e`.

```
X-Forwarded-For: 2001:DB8::21f:5bff:febf:ce22:8a2e
```

Lorsque l'attribut de préservation du port client (`routing.http.xff_client_port.enabled`) est activé sur l'équilibreur de charge, l'en-tête de la demande `X-Forwarded-For` inclut `client-port-number` ajouté à `client-ip-address`, séparés par deux points. L'en-tête prend alors la forme suivante :

```
IPv4 -- X-Forwarded-For: client-ip-address:client-port-number
```

```
IPv6 -- X-Forwarded-For: [client-ip-address]:client-port-number
```

Notez IPv6 en effet que lorsque l'équilibreur de charge ajoute le `client-ip-address` à l'en-tête existant, il place l'adresse entre crochets.

Voici un exemple d'en-tête de `X-Forwarded-For` demande pour un client dont l' IPv4 adresse `12.34.56.78` et le numéro de port sont`8080`.

```
X-Forwarded-For: 12.34.56.78:8080
```

Voici un exemple d'en-tête de `X-Forwarded-For` demande pour un client dont l' IPv6 adresse `2001:db8:85a3:8d3:1319:8a2e:370:7348` et le numéro de port sont`8080`.

```
X-Forwarded-For: [2001:db8:85a3:8d3:1319:8a2e:370:7348]:8080
```

### Préserver
<a name="x-forwarded-for-preserve"></a>

Le mode `preserve` de l'attribut garantit que l'en-tête `X-Forwarded-For` de la demande HTTP n'est en aucun cas modifié avant son envoi aux cibles.

### Supprimer
<a name="x-forwarded-for-remove"></a>

Le mode `remove` de l'attribut supprime l'en-tête `X-Forwarded-For` de la demande HTTP avant qu'elle ne soit envoyée aux cibles.

Si vous activez l'attribut de préservation du port client (`routing.http.xff_client_port.enabled`) et que vous sélectionnez également `preserve` ou `remove` pour l'attribut `routing.http.xff_header_processing.mode`, Application Load Balancer remplace l'attribut de préservation du port client. Il conserve l'en-tête `X-Forwarded-For` inchangé ou le supprime selon le mode que vous sélectionnez, avant de l'envoyer aux cibles.

Le tableau suivant présente des exemples d'en-tête `X-Forwarded-For` que la cible reçoit lorsque vous sélectionnez le mode `append`, `preserve` ou `remove`. Dans cet exemple, l'adresse IP du dernier saut est `127.0.0.1`. 


| Description de la demande | Exemple de demande | append | preserve | remove | 
| --- | --- | --- | --- | --- | 
| La demande est envoyée sans en-tête XFF | GET /index.html HTTP/1.1 Host: example.com | X-Forwarded-For: 127.0.0.1 | Absent | Absent | 
| La demande est envoyée avec un en-tête XFF et une adresse IP du client. | GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4 | X-Forwarded-For: 127.0.0.4, 127.0.0.1 | X-Forwarded-For: 127.0.0.4 | Absent | 
| La demande est envoyée avec un en-tête XFF avec plusieurs adresses IP de clients. | GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4, 127.0.0.8 | X-Forwarded-For: 127.0.0.4, 127.0.0.8, 127.0.0.1 | X-Forwarded-For: 127.0.0.4, 127.0.0.8 | Absent | 

------
#### [ Console ]

**Pour gérer l'X-Forwarded-Foren-tête**

1. Ouvrez la console Amazon EC2 à l’adresse [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Dans le volet de navigation, choisissez **Load Balancers (Équilibreurs de charge)**.

1. Sélectionnez l'équilibreur de charge.

1. Dans l'onglet **Attributes**, choisissez **Edit**.

1. Dans la section **Configuration du trafic**, sous **Gestion des paquets**, pour l'**X-Forwarded-For en-tête**, choisissez **Ajouter (**par défaut), **Préserver** ou **Supprimer**.

1. Sélectionnez **Enregistrer les modifications**.

------
#### [ AWS CLI ]

**Pour gérer l'X-Forwarded-Foren-tête**  
Utilisez la commande [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) avec l’attribut `routing.http.xff_header_processing.mode`. Les valeurs possibles sont `append`, `preserve` et `remove`. La valeur par défaut est `append`.

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes "Key=routing.http.xff_header_processing.mode,Value=preserve"
```

------
#### [ CloudFormation ]

**Pour gérer l'X-Forwarded-Foren-tête**  
Mettez à jour la [AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html)ressource pour inclure l'`routing.http.xff_header_processing.mode`attribut. Les valeurs possibles sont `append`, `preserve` et `remove`. La valeur par défaut est `append`.

```
Resources:
  myLoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "routing.http.xff_header_processing.mode"
          Value: "preserve"
```

------

## X-Forwarded-Proto
<a name="x-forwarded-proto"></a>

L'en-tête de demande `X-Forwarded-Proto` vous permet d'identifier le protocole (HTTP ou HTTPS) utilisé par un client pour se connecter à votre équilibreur de charge. Les journaux d'accès de votre serveur contiennent uniquement le protocole utilisé entre le serveur et l'équilibreur de charge ; ils ne comportent aucune information sur le protocole utilisé entre le client et l'équilibreur de charge. Pour déterminer le protocole utilisé entre le client et l'équilibreur de charge, utilisez l'en-tête de demande `X-Forwarded-Proto`. Elastic Load Balancing stocke le protocole utilisé entre le client et l'équilibreur de charge dans l'en-tête de demande `X-Forwarded-Proto` et transmet en même temps l'en-tête à votre serveur.

Votre application ou site web peut utiliser le protocole stocké dans l'en-tête de demande `X-Forwarded-Proto` pour générer une réponse qui effectue une redirection vers l'URL appropriée.

L'en-tête de demande `X-Forwarded-Proto` a le format suivant :

```
X-Forwarded-Proto: originatingProtocol
```

L'exemple suivant contient un en-tête de demande `X-Forwarded-Proto` pour une demande provenant du client en tant que demande HTTPS :

```
X-Forwarded-Proto: https
```

## X-Forwarded-Port
<a name="x-forwarded-port"></a>

L'en-tête de demande `X-Forwarded-Port` vous permet d'identifier le port de destination utilisé par le client pour se connecter à l'équilibreur de charge.