HTTP请求标头:UserAgent变量

时间:2013-02-25 14:41:45

标签: http-headers user-agent

发送HTTP请求时,IE会将User-Agent变量发送到服务器。可能的值(由网络调试器看到):

  

User-Agent:Mozilla /5.0(兼容的MSIE 9.0; Windows NT 6.1; WOW64;   三叉戟/ 5.0)

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

任何人都可以解释这个变量的过程吗?

2 个答案:

答案 0 :(得分:28)

User-Agent出现在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键或Post-Platform键中的多个令牌以不可预测的顺序显示。

答案 1 :(得分:6)

用户代理上的Wikipedia article声明:

  

用户代理字符串格式当前由第14.43节指定   RFC 2616(HTTP / 1.1)HTTP中User-Agent字符串的格式是   带有可选注释的产品令牌(关键字)列表。

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

  

14.43 User-Agent

     

User-Agent请求标头字段包含有关的信息   用户代理发起请求。这是出于统计目的,   跟踪协议违规,并自动识别用户   代理商为了定制响应以避免特定用户
  代理人限制。用户代理应该包括这个字段   要求。该字段可以包含多个产品令牌(第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

相关问题