Les conseils client sont une extension du protocole HTTP (Hypertext Transfer Protocol ) existant qui permet aux serveurs Web de demander au client (qui est généralement un navigateur Web ) des informations sur sa configuration. Le client peut choisir de répondre à cette demande en publiant les informations demandées sur lui-même en envoyant les données à l'aide d'une partie spécifique du protocole HTTP appelée champs d'en-tête HTTP ou en exposant les mêmes informations au code JavaScript en cours d'exécution sur une page Web. Cela peut ensuite aider le serveur à adapter ses réponses au client ; par exemple, un serveur peut choisir d'envoyer une image plus petite si un client annonce qu'il a un très petit écran.
Proposés par les ingénieurs de Google en 2013, les Client Hints ont été conçus comme une alternative axée sur la confidentialité aux en-têtes d'agent utilisateur . Cela a été fait dans le cadre d'une initiative de Google appelée Privacy Sandbox . Les en-têtes d'agent utilisateur sont du texte envoyé par un client à un serveur pour identifier le client. Bien qu'initialement destinés à des fins statistiques, ces en-têtes sont devenus de plus en plus un outil de suivi des utilisateurs sur plusieurs sites Web. Client Hints visait à résoudre ce problème en fournissant un moyen plus contrôlé de partager les mêmes informations. Malgré l'accent mis sur la confidentialité, la conception initiale de Client Hints a fait l'objet de critiques de la part d'autres navigateurs. L'une des principales préoccupations soulevées était que le protocole pourrait permettre de nouvelles formes de suivi par des domaines tiers. Les domaines tiers sont des serveurs Web n'appartenant pas au site Web qui chargent des ressources telles que des images et des fichiers de script. Malgré ces préoccupations, Chrome a mis en œuvre la prise en charge de Client Hints en août 2020. En mai 2024, plus de 75 % des utilisateurs Web utilisaient des navigateurs prenant en charge Client Hints.
Les chercheurs en matière de confidentialité ont depuis émis des inquiétudes quant au fait que les Client Hints sont principalement utilisés par du code JavaScript utilisé pour suivre les utilisateurs. En 2023, une étude de la KU Leuven et de l'université Radboud a révélé que parmi les 100 000 principaux sites Web sur Internet, la plupart des accès aux Client Hints provenaient du code JavaScript utilisé à des fins de suivi et de publicité .
Arrière-plan
En 1992, une extension du protocole HTTP a été introduite, ajoutant un User-Agent
en-tête HTTP qui était envoyé du client au serveur et contenait une simple chaîne identifiant le nom du client et sa version. L'en-tête était destiné uniquement à des fins statistiques et à la recherche des clients qui violaient le protocole. Depuis lors, les en-têtes User-Agent sont devenus de plus en plus complexes et ont commencé à contenir des informations significatives et identifiables de manière unique sur l'utilisateur. Souvent, ces informations sont utilisées pour effectuer l'empreinte digitale du navigateur , permettant aux sites de suivre les utilisateurs sur plusieurs sites de manière passive sans avoir à charger de JavaScript pour l'utilisateur.
Histoire
Le projet original de la spécification Client Hint a été proposé en 2013 par des ingénieurs de Google . Les spécifications sont devenues un projet de l'Internet Engineering Task Force (IETF) en novembre 2015. Par la suite, en 2021, la spécification a été mise à niveau au statut de demande de commentaires expérimentale (RFC). Cette désignation indiquait que l'IETF avait accepté la spécification Client Hints comme norme Internet , mais qu'elle avait encore des questions non résolues ou qu'elle n'avait pas encore été largement adoptée sur Internet. À peu près à la même époque, les spécifications sur la façon dont les navigateurs Web géreraient les conseils de client HTTP sur le Web ont été publiées sous forme de projet dans un rapport du groupe communautaire du W3C.
En 2020, Google a annoncé son intention de supprimer la déclaration d'agent utilisateur (UA) par le navigateur. Cette suppression faisait partie d'une initiative plus large de Google visant à apporter des modifications au Web qui permettent aux sites Web d'accéder aux informations des utilisateurs sans compromettre la confidentialité, appelée Privacy Sandbox . Ils ont cité Client Hints comme une alternative préservant la confidentialité aux en-têtes d'agent utilisateur, car ils permettaient un moyen plus contrôlé de partager les mêmes informations. La proposition initiale de Client Hints a toutefois été rejetée par d'autres navigateurs en raison de problèmes de confidentialité. En 2019, Brave a exprimé des inquiétudes concernant la proposition initiale, citant des moyens par lesquels elle pourrait être utilisée pour suivre les utilisateurs sur Internet. Mozilla , la société qui fabrique Firefox , a initialement classé la proposition comme nuisible, et Apple , la société qui fabrique Safari, a également adopté une position négative contre la proposition. Malgré ces inquiétudes, Chrome a mis en œuvre la prise en charge des conseils client HTTP en août 2020. Bien que la dépréciation des chaînes UA ait été retardée en raison de la pandémie de COVID-19 , ce processus a été achevé en février 2023.
Depuis leur opposition initiale, Mozilla a mis à jour sa position pour devenir neutre et Brave a synchronisé sa mise en œuvre des conseils client avec celle de Chrome. En mai 2024, plus de 75 % de tous les utilisateurs Web utilisent des navigateurs qui prennent en charge les conseils client.
Mécanisme
Le protocole Client Hints définit deux entités : un agent utilisateur (UA) (généralement un navigateur ) et un serveur . Ces deux entités communiquent entre elles pour négocier le type de contenu qui doit être servi à l'utilisateur. Le processus implique que le serveur envoie à l'UA une réponse avec un Accept-CH
en-tête HTTP , contenant une liste d'en-têtes HTTP Client Hint dont il a besoin. Par la suite, l'UA est censé renvoyer les conseils client demandés avec chaque réponse suivante, à condition qu'il prenne en charge ces conseils. Ces en-têtes sont ensuite utilisés par le serveur pour prendre des décisions sur le type de contenu à servir à l'UA. Si l'UA ne comprend pas ou ne prend pas en charge un conseil client particulier, l'UA est alors invité à ignorer ce conseil client particulier. Dans les cas où un conseil client spécifique ne peut pas être mis en cache , le serveur doit spécifier les en-têtes de conseils client applicables dans un Varyen-tête séparé envoyé à l'UA. Cela garantit que les mécanismes de mise en cache comprennent que les réponses peuvent varier en fonction de différentes valeurs de conseils client. Pour les conseils client qui identifient spécifiquement un navigateur, des identifiants de navigateur aléatoires supplémentaires sont inclus sous forme de graisse afin d'empêcher les utilisateurs du protocole de s'appuyer sur des comportements idiosyncratiques spécifiques au navigateur.
Pour les UA qui autorisent JavaScript , une option supplémentaire est disponible via l' APInavigator.userAgentData JavaScript . Cette API permet à JavaScript de récupérer les mêmes informations que celles fournies par les en-têtes Client Hints. L'API sépare les données qu'elle fournit en deux types : les données à faible entropie et les données à haute entropie. Les données à faible entropie correspondent aux informations susceptibles d'être similaires sur un grand groupe d'utilisateurs, telles que la plateforme sur laquelle le navigateur s'exécute et la marque du navigateur. En revanche, les données à haute entropie peuvent varier considérablement d'un utilisateur à l'autre, y compris des détails tels que le numéro de version exact du navigateur et le modèle de l'appareil de l'utilisateur. Les données à faible entropie sont incluses dans l'API en tant que paramètres d'objet, tandis que les données à haute entropie qui peuvent identifier de manière unique l'utilisateur doivent être explicitement récupérées par le client en appelant la fonction de l'API qui permet au navigateur de demander l'autorisation de l'utilisateur ou d'effectuer des vérifications supplémentaires. getHighEntropyValues()
Exemple
Pour initier une négociation de contenu , un serveur HTTP ajoute l' Accept-CHen-tête à la réponse d'une requête HTTP :
HTTP / 1.1 200 OK ... Accept-CH : largeur de la fenêtre d'affichage ...
Si l'agent utilisateur prend en charge l'indication client de largeur de la fenêtre d'affichage, l'agent utilisateur ajoutera l' Viewport-Widthen-tête dans chaque demande ultérieure,
OBTENIR /galerie HTTP / 1.1 ... Largeur de la fenêtre d'affichage : 1920 ...
Le serveur peut alors utiliser les informations contenues dans l' Viewport-Widthen-tête pour prendre une décision sur le type de contenu à fournir au client. Par exemple, si le serveur possède une image particulière extrêmement grande, le serveur peut être configuré pour renvoyer une image plus petite si l'image ne correspond pas à la fenêtre d'affichage .
Problèmes de confidentialité
Lorsque la proposition Client Hints a été initialement publiée, elle a suscité d'importantes inquiétudes en matière de confidentialité. Les fournisseurs de navigateurs comme Brave et Mozilla ont souligné qu'une disposition particulière de la version initiale de la proposition permettait aux sites Web d'ordonner au navigateur de fournir des données Client Hint à des domaines tiers. Les domaines tiers sont des domaines qui n'exécutent aucun code JavaScript, mais chargent plutôt des ressources telles que des images et des fichiers de script. La disposition de la version initiale permettrait à ces domaines tiers comme les réseaux de diffusion de contenu (CDN), qui distribuent le contenu du site Web sur un réseau de groupes de serveurs géographiquement dispersés, d'améliorer la vitesse et la fiabilité du site Web et aux fournisseurs de services cloud comme Cloudflare et Google Cloud qui offrent des services tels que le stockage de données, la puissance de calcul et l'infrastructure pour les sites Web et les applications pour suivre les utilisateurs sur le Web en demandant au navigateur d'envoyer des informations Client Hint à leurs serveurs. En outre, des inquiétudes ont également été soulevées quant au fait que la proposition Client-Hint était trop permissive et autorisait explicitement la fuite de nouvelles informations compromettant la confidentialité qui ne pouvaient pas être obtenues par une simple lecture des en-têtes HTTP vers les serveurs. De plus, les extensions qui visent à préserver la confidentialité d'un utilisateur, comme l' extension NoScript, se sont également opposées à la proposition au motif qu'elle rendrait beaucoup plus difficile d'empêcher les sites d'exfiltrer des informations compromettant la confidentialité des utilisateurs.
Depuis l'adoption des Client Hints par les principaux navigateurs comme Google Chrome et Microsoft Edge , les chercheurs en confidentialité ont soulevé des inquiétudes quant à leur utilisation dans le monde réel à des fins de suivi. Une étude de 2023 menée par des chercheurs de la KU Leuven et de l'Université Radboud a révélé que sur les 100 000 principaux sites Web, 60 % des fichiers JavaScript chargés par les pages Web accédaient aux API JavaScript Client Hints , la plupart étant des scripts de suivi et de publicité , dont beaucoup provenaient de Google . Plus de 90 % de ces fichiers de script exfiltraient les données obtenues vers des domaines de suivi. Une étude ultérieure réalisée en mai 2024 par des chercheurs de l' Université des sciences appliquées Hochschule Bonn-Rhein-Sieg a noté que si l'adoption globale des Client Hints parmi les sites Web sur Internet était faible, un nombre important de domaines tiers connus pour le suivi accédaient aux données HTTP Client Hints.