En-tête Forwarded
L'en-tête de requête HTTP Forwarded contient des informations qui peuvent être ajoutées par des serveurs mandataires inverses (équilibreurs de charge, CDN, etc.) et qui seraient autrement modifiées ou perdues lorsque des serveurs mandataires sont impliqués dans le chemin de la requête.
Par exemple, si un client se connecte à un serveur web via un proxy HTTP (ou un équilibreur de charge), les journaux du serveur ne contiendront que l'adresse IP, l'adresse hôte et le protocole du proxy ; cet en-tête peut être utilisé pour identifier l'adresse IP, l'hôte et le protocole de la requête d'origine. L'en-tête est optionnel et peut être ajouté, modifié ou supprimé par n'importe quel serveur mandataire sur le chemin vers le serveur.
Cet en-tête est utilisé pour le débogage, les statistiques et la génération de contenu dépendant de la localisation. Par conception, il expose des informations sensibles pour la vie privée, telles que l'adresse IP du client. Il faut donc garder à l'esprit la vie privée de l'utilisateur·ice lors de l'utilisation de cet en-tête.
Les versions alternatives et de facto standard de cet en-tête sont X-Forwarded-For, X-Forwarded-Host et X-Forwarded-Proto.
| Type d'en-tête | En-tête de requête |
|---|---|
| En-tête de requête interdit | Non |
Syntaxe
Forwarded: by=<identifier>;for=<identifier>;host=<host>;proto=<http|https>
Les directives sont des paires clé=valeur, séparées par un point-virgule.
S'il y a plusieurs serveurs mandataires entre le client et le serveur, chacun peut définir ses propres informations de transmission.
Cela peut se faire en ajoutant un nouvel en-tête Forwarded à la fin du bloc d'en-têtes, ou en ajoutant l'information à la fin du dernier en-tête Forwarded dans une liste séparée par des virgules.
Directives
byFacultatif-
L'interface par laquelle la requête est arrivée sur le serveur mandataire. L'identifiant peut être :
- un identifiant obscurci (comme « hidden » ou « secret »). Ceci doit être considéré comme la valeur par défaut.
- une adresse IP (v4 ou v6, éventuellement avec un port, et l'IPv6 entre guillemets et crochets)
- « unknown » lorsque l'entité précédente n'est pas connue (et que vous souhaitez tout de même indiquer que la requête a été transmise)
forFacultatif-
Le client qui a initié la requête et les serveurs mandataires suivants dans une chaîne de serveurs mandataires. L'identifiant a les mêmes valeurs possibles que la directive
by. hostFacultatif-
Le champ d'en-tête de requête
Hosttel que reçu par le serveur mandataire. protoFacultatif-
Indique le protocole utilisé pour effectuer la requête (généralement « http » ou « https »).
Exemples
>Utilisation de l'en-tête Forwarded
Forwarded: for="_mdn"
# insensible à la casse
Forwarded: For="[2001:db8:cafe::17]:4711"
# séparé par un point-virgule
Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43
# Les valeurs provenant de plusieurs serveurs mandataires peuvent être ajoutées avec une virgule
Forwarded: for=192.0.2.43, for=198.51.100.17
Passage de X-Forwarded-For à Forwarded
Si votre application, serveur ou serveur mandataire prend en charge l'en-tête standardisé Forwarded, l'en-tête X-Forwarded-For peut être remplacé.
Notez qu'une adresse IPv6 est placée entre guillemets et crochets dans Forwarded (contrairement à l'en-tête X-Forwarded-For).
X-Forwarded-For: 192.0.2.172
Forwarded: for=192.0.2.172
X-Forwarded-For: 192.0.2.43, 2001:db8:cafe::17
Forwarded: for=192.0.2.43, for="[2001:db8:cafe::17]"
Spécifications
| Specification |
|---|
| Forwarded HTTP Extension> |
Voir aussi
- L'en-tête
X-Forwarded-For - L'en-tête
X-Forwarded-Host - L'en-tête
X-Forwarded-Proto - L'en-tête
Via— fournit des informations sur le proxy lui-même, et non sur le client qui s'y connecte.