24

发送 HTTP 请求时,IE 将 User-Agent 变量发送到服务器。一个可能的值(如网络调试器所见):

用户代理:Mozilla /5.0(兼容 MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0)

我的问题:IE(或任何其他浏览器)如何找到这个变量?我问这个是因为在访问某些网站时,这个变量与其他变量不同,我想追踪变化的来源。“兼容性设置”是一种选择,但我认为还有更多。

谁能解释这个变量的过程?

4

2 回答 2

29

用户代理出现在 HTTP 请求标头中,而不是 HTTP 响应标头中。通常,请求是从浏览器发送到 Web 应用程序的。所以用户代理变量由浏览器填充。不同的浏览器会用不同的值填充这个字段。

关于 IE 如何找到这些变量,我想您是在询问User-Agent Registry Keys

您还可以通过将值添加到以下注册表项来覆盖用户代理字符串的某些标记。

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

用户代理键的默认值替换用户代理字符串中报告的应用程序名称和应用程序版本标记。请注意,前七个字符用于应用程序名称,其余字符指定应用程序版本令牌。

Compatible、Platform 和 Version 值替换用户代理字符串中的相应标记。

通过使用注册表编辑器在 Pre-Platform 键或 Post-Platform 键下创建新的字符串值,可以将其他令牌添加到用户代理字符串。值名称应该是完整的标记;值数据被忽略。添加到 Pre-Platform 密钥的令牌出现在最终用户代理字符串中的平台令牌之前。添加到 Post-Platform 键的标记出现在最终用户代理字符串中的平台标记之后。Pre-Platform key 或 Post-Platform key 中的多个令牌以不可预知的顺序显示。

于 2013-03-05T04:40:11.387 回答
6

关于用户代理的维基百科文章指出:

User-Agent 字符串格式目前由 RFC 2616 (HTTP/1.1) 的第 14.43 节指定。HTTP 中的 User-Agent 字符串格式是带有可选注释的产品标记(关键字)列表。

所以我建议你阅读关于它的RFC 2616 部分

14.43 用户代理

User-Agent request-header 字段包含有关发起请求的用户代理的信息。这是出于统计目的、协议违规的跟踪以及用户代理的自动识别,以便定制响应以避免特定的用户
代理限制。
用户代理应该在请求中包含这个字段。
该字段可以包含多个产品令牌(第 3.8 节)和标识代理的注释以及构成用户代理重要部分的任何子产品。按照惯例,产品令牌是按照它们对识别应用程序的重要性的顺序列出的

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

例子:

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

关于产品令牌的第 4.8 节规定如下:

3.8 产品代币

产品令牌用于允许通信应用程序
通过软件名称和版本来识别自己。大多数使用
产品令牌的字段还允许列出构成应用程序重要部分的子产品,
用空格分隔。按照
惯例,这些产品是按照它们
对识别应用程序的重要性排列的。

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

例子:

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

产品代币应该简短明了。它们不得
用于广告或其他非必要信息。尽管任何标记字符都可以出现在产品版本中,但该标记应该
只用于版本标识符(即,
同一产品的连续版本应该只在产品值的产品版本部分有所不同)。

所以根据 RFC 2616,用户代理的内容取决于浏览器。例如,Mozilla Firefox 是如何构建其用户代理的: https ://developer.mozilla.org/en-US/docs/Gecko_user_agent_string_reference

于 2013-03-06T11:48:21.747 回答