Qu'est-ce que la réduction user-agent ?

La réduction de la chaîne user-agent (UA) minimise la quantité d'informations permettant l'identification personnelle partagées dans la chaîne, qui peuvent être utilisées pour le fingerprinting passif. Maintenant que ces modifications ont été déployées pour la disponibilité générale, toutes les demandes de ressources ont un en-tête User-Agent réduit. Par conséquent, les valeurs renvoyées par certaines interfaces Navigator sont réduites, y compris navigator.userAgent, navigator.appVersion et navigator.platform.

Les développeurs Web doivent examiner le code de leur site pour vérifier l'utilisation de la chaîne User-Agent. Si votre site s'appuie sur l'analyse de la chaîne User-Agent pour lire le modèle de l'appareil, la version de la plate-forme ou la version complète du navigateur, vous devrez implémenter l'API User-Agent Client Hints.

User-Agent Client Hints (UA-CH)

Les indices client User-Agent permettent d'accéder à l'ensemble des données User-Agent, mais uniquement lorsque les serveurs déclarent activement avoir besoin de données spécifiques.

En supprimant les données utilisateur exposées de manière passive, nous pouvons mieux mesurer et réduire la quantité d'informations exposées intentionnellement par les en-têtes de requête, les API JavaScript et d'autres mécanismes.

Pourquoi avons-nous besoin de réduire l'UA et l'UA-CH ?

Historiquement, la chaîne User-Agent diffusait une longue chaîne de données sur le navigateur, le système d'exploitation et la version d'un utilisateur à chaque requête HTTP. Cela posait problème pour deux raisons :

  • La précision et l'abondance des détails peuvent permettre d'identifier les utilisateurs.
  • La disponibilité par défaut de ces informations peut entraîner un suivi secret.

Les chaînes UA et UA-CH réduites améliorent la confidentialité des utilisateurs en ne partageant que des informations de base par défaut.

Le user-agent réduit inclut la marque et une version significative du navigateur, l'origine de la requête (ordinateur ou mobile) et la plate-forme. Pour accéder à davantage de données, les User-Agent Client Hints vous permettent de demander des informations spécifiques sur l'appareil ou les conditions de l'utilisateur.

De plus, au fil du temps, la chaîne User-Agent est devenue plus longue et plus complexe, ce qui a entraîné une analyse de chaîne sujette aux erreurs. UA-CH fournit des données structurées et fiables, plus faciles à interpréter. Le code existant qui analyse la chaîne UA ne devrait pas être interrompu (bien qu'il renvoie moins de données). Vous devrez migrer vers UA-CH si votre site a besoin d'informations client spécifiques.

Comment fonctionnent les codes UA et UA-CH réduits ?

Voici un bref exemple de fonctionnement de la chaîne user-agent réduite et de UA-CH. Pour obtenir un exemple plus détaillé, consultez Améliorer la confidentialité des utilisateurs et l'expérience des développeurs avec les hints client user-agent.

Un utilisateur ouvre le navigateur et saisit example.com dans la barre d'adresse :

  1. Le navigateur envoie une requête pour charger la page Web.

    1. Le navigateur inclut l'en-tête User-Agent avec la chaîne User-Agent réduite. Exemple : User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36.
    2. Le navigateur inclut ces mêmes informations dans les en-têtes User-Agent Client Hints par défaut. Exemple :

      Sec-CH-UA: "Chrome"; v="98"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
      
  2. Le serveur peut demander au navigateur d'envoyer des indications client supplémentaires, telles que le modèle de l'appareil, avec l'en-tête de réponse Accept-CH. Exemple : Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model.

  3. Le navigateur applique des règles et une configuration utilisateur pour déterminer les données autorisées à être renvoyées au serveur dans les en-têtes de requête suivants. Exemple :

    Sec-CH-UA: "Chrome"; v="93"
    Sec-CH-UA-Mobile: ?1
    Sec-CH-UA-Platform: "Android"
    Sec-CH-UA-Model: "Pixel 2"
    

Indices client critiques

Si vous avez besoin d'un ensemble spécifique d'indices client dans votre requête initiale, vous pouvez utiliser l'en-tête de réponse Critical-CH. Les valeurs Critical-CH doivent être un sous-ensemble des valeurs demandées par Accept-CH.

Par exemple, la requête initiale peut inclure une demande pour Device-Memory et Viewport-Width, où Device-Memory est considéré comme critique.

GET / HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Device-Memory, Viewport-Width
Vary: Device-Memory, Viewport-Width
Critical-CH: Device-Memory

Si le navigateur a besoin d'un indice critique (Critical-CH) pour afficher correctement la page Web, le serveur peut demander ces informations supplémentaires avec l'en-tête Accept-CH. Le navigateur peut ensuite envoyer une nouvelle requête pour la page, y compris l'indication critique.

En résumé, les requêtes Accept-CH demandent toutes les valeurs souhaitées pour la page, tandis que les requêtes Critical-CH ne demandent que le sous-ensemble de valeurs dont vous avez besoin au chargement pour que la page se charge correctement. Pour en savoir plus, consultez la spécification de fiabilité des indications client.

Détecter les tablettes avec l'API UA-CH

La frontière entre les appareils mobiles, les tablettes et les ordinateurs de bureau s'estompe de plus en plus, et les facteurs de forme dynamiques sont de plus en plus courants (écrans pliables, passage du mode ordinateur portable au mode tablette). Il est donc conseillé d'utiliser la conception responsives et la détection de fonctionnalités pour présenter une interface utilisateur appropriée.

Toutefois, les informations fournies par le navigateur pour la chaîne user-agent et les user-agent client hints proviennent de la même source. Les mêmes formes de logique devraient donc fonctionner.

Par exemple, si ce modèle est vérifié dans la chaîne UA :

  • Format du numéro de téléphone : 'Android' + 'Chrome/[.0-9]* Mobile'
  • Format de la tablette : 'Android' + 'Chrome/[.0-9]* (?!Mobile)'

L'interface des en-têtes UA-CH par défaut correspondants peut être cochée :

  • Modèle de téléphone : Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?1
  • Modèle de tablette : Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?0

Ou l'interface JavaScript équivalente :

  • Format du numéro de téléphone : navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true
  • Format de la tablette : navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false

Pour les cas d'utilisation spécifiques au matériel, le nom du modèle de l'appareil peut être demandé via l'indice Sec-CH-UA-Model à haute entropie.

Comment utiliser et tester l'interface utilisateur simplifiée ?

Pour commencer, examinez le code de votre site pour identifier les instances et les utilisations de la chaîne User-Agent. Si votre site s'appuie sur l'analyse de la chaîne User-Agent pour lire le modèle d'appareil, la version de la plate-forme ou la version complète du navigateur, vous devrez implémenter l'API UA-CH.

Une fois que vous êtes passé à l'API UA-CH, vous devez effectuer des tests pour vous assurer d'obtenir les données attendues de l'User-Agent. Il existe trois façons de tester, chacune étant plus complexe que la précédente.

La disponibilité à grande échelle de la réduction du user-agent signifie que la chaîne UA entièrement réduite est déployée sur tous les appareils Chrome. La réduction a commencé avec une version mineure de Chrome au deuxième trimestre 2022.

Tester les chaînes personnalisées en local

Si vous souhaitez tester votre site à l'aide de chaînes User-Agent personnalisées pour simuler différents appareils, lancez Chrome avec l'indicateur de ligne de commande --user-agent="Custom string here". Pour en savoir plus sur les options de ligne de commande, cliquez ici.

Vous pouvez également utiliser l'émulateur d'appareil dans les outils pour les développeurs Chrome.

Transformer la chaîne dans le code de votre site

Si vous traitez la chaîne user-agent Chrome existante dans votre code côté client ou côté serveur, vous pouvez la transformer au nouveau format pour tester la compatibilité. Pour effectuer un test, vous pouvez remplacer la chaîne ou générer la nouvelle version et la tester côte à côte.

Compatibilité avec les indications client et les indications critiques

Trois indices client par défaut sont renvoyés au serveur, y compris le nom et la version majeure du navigateur, un booléen indiquant si le navigateur se trouve sur un appareil mobile et le nom du système d'exploitation. Ils sont envoyés après le handshake du protocole TLS (Transport Layer Security). Elles sont déjà disponibles et compatibles avec votre navigateur.

Toutefois, il peut arriver que vous ayez besoin de récupérer des informations critiques pour que votre site s'affiche.

Optimiser les suggestions critiques

Le handshake TLS est la première étape pour créer une connexion sécurisée entre le navigateur et le serveur Web. En l'absence d'intervention, l'en-tête de réponse Critical-CH a été conçu pour indiquer au navigateur de relancer immédiatement la requête si la première a été envoyée sans indication critique.

Schéma séquentiel pour les hints client avec des hints critiques.
Lorsqu'un indice critique est demandé par le serveur, le client tente à nouveau d'envoyer la première requête pour la page Web avec l'indice critique. Dans cet exemple, l'indication pour Sec-CH-UA-Model est demandée deux fois : une fois en tant qu'indication client avec Accept-CH et une autre fois en tant qu'indication critique avec Critical-CH.

Pour optimiser les indications critiques (en-tête Critical-CH), vous devez intercepter cette prise de contact et fournir un modèle pour les indications client. Ces étapes peuvent être complexes et nécessitent des connaissances avancées.

Les frames HTTP/2 et HTTP/3, combinés à l'extension TLS ALPS, constituent une optimisation au niveau de la connexion qui permet de fournir les préférences d'indices client du serveur à temps pour la première requête HTTP.ACCEPT_CH Elles nécessitent une configuration complexe. Nous vous recommandons de ne les utiliser que pour les informations vraiment critiques.

BoringSSL (une version d'OpenSSL) vous aide à utiliser les fonctionnalités expérimentales de Google dans Chromium. Pour le moment, ALPS n'est implémenté que dans BoringSSL.

Si vous devez utiliser des indications critiques, consultez notre guide sur la fiabilité et l'optimisation des indications critiques.

Questions fréquentes

Pendant combien de temps les indices spécifiés via l'en-tête Accept-CH seront-ils envoyés ?

Les indices spécifiés via l'en-tête Accept-CH seront envoyés pendant toute la durée de la session du navigateur ou jusqu'à ce qu'un autre ensemble d'indices soit spécifié.

UA-CH fonctionne-t-il avec HTTP/2 et HTTP/3 ?

UA-CH fonctionne avec les connexions HTTP/2 et HTTP/3.

Les sous-domaines (et les CNAME) nécessitent-ils une page de premier niveau Permissions-Policy pour accéder à l'UA-CH à haute entropie ?

Les UA-CH à haute entropie dans les en-têtes de requête sont limités pour les requêtes multi-origines, quelle que soit la manière dont cette origine est définie côté DNS. La délégation doit être gérée via Permissions-Policy pour toute sous-ressource d'origine différente ou obtenue via JavaScript qui s'exécute dans le contexte d'origine différente.

Quel est l'impact de la réduction user-agent sur la détection des robots ?

La modification apportée par Chrome à sa chaîne user-agent n'a pas d'incidence directe sur la chaîne user-agent qu'un robot choisit d'envoyer.

Les robots peuvent choisir de mettre à jour leurs propres chaînes pour refléter la réduction des informations envoyées par Chrome, mais il s'agit entièrement de leur choix d'implémentation. Chrome envoie toujours le même format d'agent utilisateur, et les robots qui ajoutent leur propre identifiant à la fin d'une chaîne d'agent utilisateur Chrome peuvent continuer à le faire.

Si vous avez des questions concernant des robots spécifiques, vous pouvez contacter directement leurs propriétaires pour leur demander s'ils prévoient de modifier leur chaîne User-Agent.

Interagir et envoyer des commentaires

En savoir plus