用户代理

维基百科,自由的百科全书
跳转至: 导航搜索

计算机科学中,用户代理英语User Agent)指的是代表使用者行为的软件(软件代理程序英语Software agent)所提供的对自己的一个标识符。例如,一个电子邮件阅读器就是一个电子邮件客户端,而在会话发起协议 (SIP) 中,用户代理的术语指代的是一个通信会话的所有两个终端[1]

在很多场合,用户代理作为一个主从式架构的分布式计算系统中的通信所用网络传输协议客户端而行为。特别的,超文本传输协议指定了发起请求的客户端软件,使用一个“User-Agent”请求头,即使在客户端不由用户操纵的时候。SIP 协议(基于 HTTP)沿用了这一用法。

用户代理识别[编辑]

当一个软件代理运行于一个网络协议时,它通常通过向它的 operating peer 提交一个特征识别的字符串以标识它自己,它的应用类型,操作系统,软件供应商,或者软件修订版本。在 HTTP, SIP 以及 SMTP/NNTP[2] 协议中,这个识别是通过 user-agent 头字段传送的。网络机器人,例如网络抓取工具,通常也包括一个 URL 以及/或一个电子邮件地址以便网站管理员可以联系 bot 的操纵者。

在 HTTP 中,User-Agent 字符串通常被用於内容协商英语Content negotiation,而原始服务器为该响应选择适当的内容或操作参数。例如,User-Agent 字符串可能被网络服务器用以基于特定版本的客户端软件的已知功能选择适当的变体。

用户代理字符串是网络抓取工具通过使用 robots.txt 文件以从对网站的某些部分的访问中被排除的标准之一。

可能隐私问题[编辑]

与许多其它 HTTP 请求标头一样,在 User-Agent 字符串内的信息构成了客户端发送给服务器的信息的一部分,由于该字符串可以因用户不同而有很大程度的差异。[3]

格式[编辑]

用户代理字符串的格式目前被RFC 2616 (HTTP/1.1)的 Section 14.43 所指定。在 HTTP 中,用户代理字符串的格式是产品标记(关键字)和可选的注释所组成的一个列表。例如如果你的产品叫做 WikiBrowser, 你的用户代理字符串就可能是 WikiBrowser/1.0 Gecko/1.0。「最重要的」产品组件被最先列出。这个字符串的部分如下所示:

  • 产品名称和版本(WikiBrowser/1.0
  • 排版引擎和版本(Gecko/1.0)。在这种情况下,这指示了排版引擎和版本。

但不幸的是,在浏览器大战期间,很多网络服务器被配置为只给被识别为某些版本的 Mozilla 的客户端发送需要高级功能的网页。

由于这个原因,绝大多数网页浏览器使用的 User-Agent 值如下:Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]。例如,iPad 上的 Safari 使用的就是下述:

Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405

这个字符串的组成如下:

  • Mozilla/5.0:先前用以指示与 Mozilla 排版引擎的兼容性
  • (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us):浏览器所运行于的系统的详细信息
  • AppleWebKit/531.21.10:浏览器所使用的平台
  • (KHTML, like Gecko):浏览器平台的细节
  • Mobile/7B405:被浏览器用于指示特定的直接由浏览器提供或者通过第三方提供的可用的增强功能。这方面的一个实例是 Microsoft Live Meeting,它注册了一个扩展以使 Live Meeting 服务知道该软件是否已经安装上,这意味着它可以为加入会议提供一个简化的体验。

用户代理欺骗[编辑]

各种网页浏览器产品的流行程度在整个 Web 的历史上一直在变化,而且这通过网站有时被设计为只在特定浏览器下工作,而不是根据万维网联盟(W3C)或者互联网工程任务组(IETF)所制定的统一标准的方式影响了网站的设计。网站通常包括用以探测浏览器版本的代码,以根据接收到的用户代理字符串调节所发送的页面设计。这也许意味着,没那么流行的浏览器不会被发送复杂的内容(尽管它们可能有能力正确处理它)或者,在极端情况下,拒绝全部内容[4]。因此,很多种浏览器有伪装或欺骗其标识字符串的功能以强制某些服务器端的内容。例如,Android 上的浏览器识别自己为 Safari 以增加兼容性。[5]

其它 HTTP 客户端程序,如下载管理器离线网页浏览器,通常有能力更改用户代理字符串。

垃圾邮件机器人英语Spambot网路蜘蛛 经常使用假的用户代理。

在网页开发者中已流行启动“任何浏览器可见”活动[6],鼓励开发者设计在任何浏览器中工作的一样好的网页。

用户代理欺骗的结果之一是可能令收集到的网页浏览器的使用分布不准确。

用户代理嗅探[编辑]

用户代理嗅探(User Agent sniffing)指的是网站在特定用户代理下查看时展示不同内容的技术。在互联网上,这将导致在特定浏览器下浏览某些网页时显示的是截然不同的站点。这方面一个有用的例子是 Microsoft Exchange Server 2003 的 Outlook Web Access 功能。当在 Internet Explorer 6 (或更新版本) 查看时,比起在任何更旧浏览器中的相同页面,会有更多功能被显示,因为旧的浏览器无法渲染相同内容[來源請求]。用户代理嗅探大多被认为是不好的做法,因为它鼓励浏览器特定的设计而且由于无法识别的用户代理标识而惩罚新的浏览器。相反,W3C 推荐创建标准的 HTML 标记,[7]允许在尽可能多的浏览器下正确的渲染,且测试特定的浏览器特性而不是特定浏览器版本或品牌。[8]

专门针对手机的 Web 站点,如 NTT DOCOMOi-mode或者沃达丰Vodafone live! 门户网站,通常严重依赖于用户代理嗅探,由于移动浏览器通常相互之间差异巨大。在最近几年中,[何时?]在移动浏览领域已作出了很多发展,然而很多并不拥有这些新技术的旧的手机仍然在被广泛使用。所以,手机门户网站经常依赖用以浏览它们的手机种类而产生而产生截然不同的标记代码。这些差异可以很小,如,调整某些图像的大小以适应更小的屏幕,或者相当大,如,以 WML 渲染网页而不是 XHTML

加密强度表示法[编辑]

在美国创建的网页浏览器,如 Netscape NavigatorInternet Explorer,在用户代理字符串中使用字母 U, I 和 N 以指定加密强度。直至 1996 年,美国政府允许了通过长于 40 位密钥的加密被出口为止,供应商推出不同浏览器版本,各自具有不同加密强度。“U” 代表美国(为具有 128-位加密的版本);“I” 代表国际 — 浏览器具有 40-位加密且可以在全世界任何地方被使用 — 而 “N” 代表(事实上)“没有”(没有加密)。[9]随着出口限制的解除,绝大多数供应商支持了 256-位加密。

参见[编辑]

参考[编辑]

  1. ^ RFC 3261, SIP: Session Initiation Protocol, IETF, The Internet Society (2002)
  2. ^ Netnews Article Format. IETF. November 2009: sec. 3.2.13. RFC 5536. 
  3. ^ Peter Eckersley. "Browser Versions Carry 10.5 Bits of Identifying Information on Average", Electronic Frontier Foundation, 27 January 2010. Retrieved 25 August 2011.
  4. ^ Burstein complaining "... I've been rejected until I come back with Netscape"
  5. ^ http://androidcommunity.com/forums/f8/android-browser-reports-itself-as-apple-safari-4701/
  6. ^ "Viewable with Any Browser" campaign
  7. ^ Pemberton, Stephen. W3C Markup Validation Service. W3C. [2011-10-18]. 
  8. ^ Clary, Bob. Browser Detection and Cross Browser Support. Mozilla Developer Center. Mozilla. 10 February 2003 [2009-05-30]. 
  9. ^ Zawinski, Jamie. user-agent strings (obsolete). mozilla.org. 1998-03-28 [2010-01-08]. 

外部連結[编辑]