web-dev-qa-db-fra.com

En-tête de requête HTTP: variable UserAgent

Lors de l'envoi d'une requête HTTP, IE envoie la variable User-Agent au serveur. Une valeur possible (telle que vue par le débogueur réseau):

User-Agent: Mozilla /5.0 (Compatible MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Ma question: comment IE (ou tout autre navigateur) découvre-t-elle cette variable? Je pose la question parce que lorsque vous visitez certains sites Web, cette variable est différente des autres et j'aimerais tracer d'où vient le changement. "Paramètres de compatibilité" est une option, mais je pense qu'il y a plus.

Quelqu'un peut-il expliquer le processus de cette variable?

23
PoeHaH

L'agent utilisateur apparaît dans un en-tête de demande HTTP et non dans une réponse HTTP. En général, la demande est envoyée du navigateur à l'application Web. La variable user-agent est donc remplie par le navigateur. Différents navigateurs rempliront ce champ avec différentes valeurs.

Comment IE trouver ces variables, je pense que vous posez des questions sur Clés de registre de l'agent utilisateur .

Vous pouvez également remplacer certains jetons de la chaîne d'agent utilisateur en ajoutant des valeurs à la clé de registre suivante.

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Internet Settings
                  5.0
                     User Agent
                        (default) = "Mozilla/4.0"
                        Compatible = "compatible"
                        Platform = "Windows NT 5.1"
                        Version = "MSIE 6.0"
                        Pre Platform
                           Token = Value
                        Post Platform
                           Token = Value

La valeur par défaut de la clé d'agent utilisateur remplace le nom de l'application et les jetons de version d'application signalés dans la chaîne de l'agent utilisateur. N'oubliez pas que les sept premiers caractères sont utilisés pour le nom de l'application et que les caractères restants spécifient le jeton de version de l'application.

Les valeurs Compatible, Platform et Version remplacent les jetons correspondants dans la chaîne d'agent utilisateur.

Des jetons supplémentaires peuvent être ajoutés à la chaîne de l'agent utilisateur à l'aide de l'Éditeur du Registre pour créer de nouvelles valeurs de chaîne sous la clé pré-plate-forme ou la clé post-plate-forme. Le nom de la valeur doit être le jeton complet; les données de valeur sont ignorées. Les jetons ajoutés à la clé de pré-plate-forme apparaissent avant le jeton de plate-forme dans la chaîne d'agent utilisateur finale. Les jetons ajoutés à la clé Post-Platform apparaissent après le jeton de plateforme dans la chaîne finale de l'agent utilisateur. Plusieurs jetons dans la clé pré-plateforme ou la clé post-plateforme sont affichés dans un ordre imprévisible.

28
StarPinkER

article Wikipedia sur l'agent utilisateur indique que:

Le format de chaîne User-Agent est actuellement spécifié par la section 14.43 de la RFC 2616 (HTTP/1.1). Le format de la chaîne User-Agent en HTTP est une liste de jetons de produit (mots-clés) avec des commentaires facultatifs.

Je vous recommande donc de lire la section RFC 2616 à ce sujet:

14.43 User-Agent

Le champ d'en-tête de demande de l'agent utilisateur contient des informations sur l'agent utilisateur à l'origine de la demande. Ceci est à des fins statistiques, le traçage des violations de protocole et la reconnaissance automatisée des agents utilisateurs dans le but d'adapter les réponses pour éviter un utilisateur particulier
limitations de l'agent. Les agents utilisateurs DEVRAIENT inclure ce champ avec
demandes. Le champ peut contenir plusieurs jetons de produit (section 3.8) et des commentaires identifiant l'agent et les sous-produits qui forment un
partie importante de l'agent utilisateur. Par convention, les jetons de produit sont répertoriés par ordre d'importance pour identifier le
application.

   User-Agent     = "User-Agent" ":" 1*( product | comment )

Exemple:

   User-Agent: CERN-LineMode/2.15 libwww/2.17b3

La section 4.8 sur les jetons de produits indique ce qui suit:

3.8 Jetons de produit

Les jetons de produit sont utilisés pour permettre aux applications
s'identifient par le nom et la version du logiciel. La plupart des champs utilisant
les jetons de produit permettent également les sous-produits qui constituent une partie importante
de la demande à répertorier, séparés par un espace blanc. Par
convention, les produits sont classés par ordre d'importance
pour identifier l'application.

   product         = token ["/" product-version]
   product-version = token

Exemples:

   User-Agent: CERN-LineMode/2.15 libwww/2.17b3
   Server: Apache/0.8.4

Les jetons de produit DEVRAIENT être courts et précis. Ils NE DOIVENT PAS être
utilisé pour la publicité ou d'autres informations non essentielles. Bien que tout caractère de jeton PEUT apparaître dans une version de produit, ce jeton DEVRAIT
ne doit être utilisé que pour un identifiant de version (c'est-à-dire des versions successives de
le même produit NE DEVRAIT différer que dans la partie version-produit de la valeur du produit).

Ainsi, selon la RFC 2616, le contenu des agents utilisateurs dépend du navigateur. Par exemple, voici comment Mozilla Firefox construit son agent utilisateur: https://developer.mozilla.org/en-US/docs/Gecko_user_agent_string_reference

6
Bgi