科学

用户代理

User Agent

  • 中文名:用户代理
  • 外文名:User Agent
  • 概述:指用户浏览器端的信息
  • 简称:UA
  • 释义:一个特殊字符串头
  • 用户代理介绍
    用较为专业的术语来说,User Agent是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。用较为普通的一点来说,是一种向访问网站提供你所使用的浏览器类型、操作系统、浏览器内核等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;例如用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的UA来判断的。

    基本含义

    在X.400电子系统中,用户代理是一种对数据打包、创造分组头,以及编址、传递消息的部件。

    用户代理是指浏览器,它的信息包括硬件平台、系统软件、应用软件和用户个人偏好。用户代理并不是仅指浏览器,还包括搜索引擎。

    用户代理的能力和偏好可以认为是元数据或用户代理的硬件和软件的特性和描述。

    扩展知识

    user-agent是指用户浏览器端的信息,比如你是用IE的还是firefox的,有些网站会根据这个来调整打开网站的类型,如是手机的就打开wap,显示非手机的就打开pc常规页面。

    许多浏览器和下载软件会伪装user agent来回避某些侦测特定浏览器才能读取的网站。

    字串史

    在《特性检测并非浏览器检测》贴文中谈到了 User-agent嗅探,有回贴支持本人继续谈下去。那本人认为:User-agent 嗅探是必备的一项重要的技术。要知道 user-agent 字串检测不太精准的原因,必须谈这些年来 user-agent 字串发生了怎样的变化。

    较古的浏览器

    1993年,NCSA发布了首款web 浏览器 Mosaic。它的 user-agent 字串非常简洁:

    Mosaic/0.9虽然当时由于它对操作系统和平台的依赖性,但是基本格式还是很简单明了。在文本中,斜杠前面是产品名称(可能会显示为NCSAMosaic或是其他类似的字),斜杠后面是产品版本号。

    NetscapeCommunications开发了web 浏览器 Mozilla(当时号称“Mosaic杀手”)。他们首款公开发行版本:NetscapeNavigator2的user-agent 字串具有如下格式:

    Mozilla/Version[Language](Platform;Encryption)Netscape按之前的做法在 user-agent 字串的前半部分使用了产品名称和产品版本,但在后面增加了下列信息:

    Language-表示应用程序用的是哪个语言Platform-表示应用程序是在什么操作系统和/或平台中运行Encryption-表示应用程序包含了什么安全加密类型。其中的值可能是U(128位加密)、I(40位加密)、N(没加密)。NetscapeNavigator2的 user-agent 字串的示例:

    Mozilla/2.02[fr](WinNT;I)上面的字串指:NetscapeNavigator2.02、法语、WindowsNT、40位加密。在当时,通过 user-agent 字串中的产品名称,可以正确判断使用的是哪个web浏览器。NetscapeNavigator3、InternetExplorer3。1996年,NetscapeNavigator3发布,它远远超过Mosaic成为当时最流行的web浏览器。而 user-agent 字串只有些小的变化:去掉了语言部分,多了个放操作系统或CPU的可选信息。格式如下:

    Mozilla/Version(Platform;Encryption[;OS-or-CPUdescription])在Windows系统中NetscapeNavigator3的user-agent字串的示例:

    Mozilla/3.0(Win95;U)上面的字串指:NetscapeNavigator3、Windows95、128位加密。在Windows系统中,字串里面不会显示OS或CPU的信息。

    NetscapeNavigator3发布不久,微软公布了它的首款web 浏览器:IE3¹,但是Netscape是当时首选浏览器,大多数服务器在加载页面前都会检查user-agent是否为该款浏览器。IE如果不兼容Netscapeuser-agent字串,使用IE的用户就根本打不开这些页面,于是造就了如下格式:

    Mozilla/2.0(compatible;MSIEVersion;OperatingSystem)在Windows95中IE3.02的 user-agent 字串的示例:

    Mozilla/2.0(compatible;MSIE3.02;Windows95)由于当时的浏览器嗅探只查 user-agent 字串中的产品名称部分,结果IE摇身一变被识别成了Mozilla,伪装成NetscapeNavigator。这个做法引发了对浏览器识别的争论。从此以后,浏览器真正的版本埋没在了字串的中间。NetscapeCommunicator4、InternetExplorer4至8 1997年8月,NetscapeCommunicator4发布(发布的名称中Navigator换成了Communicator),它的 user-agent 字串格式与3版本一致。Windows98中4版本的 user-agent 字串如下:

    Mozilla/4.0(Win98;I)Netscape 浏览器在更新时,版本也相应增加。4.79版本的 user-agent 字串如下:

    Mozilla/4.79(Win98;I)微软发布IE4时,user-agent 字串更新了版本,格式如下:

    Mozilla/4.0(compatible;MSIEVersion;OperatingSystem)在Windows98中IE4的 user-agent 字串的示例:

    Mozilla/4.0(compatible;MSIE4.0;Windows98)可以看出,Mozilla的版本与IE实际的版本一致,这样就可以识别第4代浏览器了。但遗憾的是,不久IE4.5马上就发布了(只在Mac平台),虽然Mozilla版本仍是4,但是IE的版本改成如下:

    Mozilla/4.0(compatible;MSIE4.5;Mac_PowerPC)此后,IE的版本一直到7都沿用了这个模式。

    而IE8的 user-agent 字串添加了呈现引擎(renderingengine)版本:

    Mozilla/4.0(compatible;MSIE8.0;WindowsNT5.1;Trident/4.0)新增的呈现引擎非常重要!这样IE8以MSIE7.0兼容模式运行时,Trident版本保持不变,而原先IE7的 user-agent 字串不包括Trident版本。这样可以区分IE7与IE8运行的兼容模式。

    注意:别指望能从Mozilla版本中得到什么靠谱的信息。

    Gecko

    Gecko是Firefox的呈现引擎。Gecko首次开发是作为Mozilla 浏览器 Netscape6的一部分。Netscape6的 user-agent 字串的结构是面向未来的,新版本反应出从4.x版本的简单变得较为复杂,它的格式如下:

    Mozilla/MozillaVersion(Platform;Encryption;OS-or-CPU;Language;PrereleaseVersion)Gecko/GeckoVersionApplicationProduct/ApplicationProductVersion为了更好的理解上面的Gecko user-agent 字串格式,下面来看看各种从基于Gecko 浏览器中取得的字串。

    在WindowsXP中的Netscape6.21:

    Mozilla/5.0(Windows;U;WindowsNT5.1;en-US;rv:0.9.4)Gecko/20011128Netscape6/6.2.1在Linux中的SeaMonkey1.1a:

    Mozilla/5.0(X11;U;Linuxi686;en-US;rv:1.8.1b2)Gecko/20060823SeaMonkey/1.1a在WindowsXP中的Firefox2.0.0.11:

    Mozilla/5.0(Windows;U;WindowsNT5.1;en-US;rv:1.8.1.11)Gecko/20071127Firefox/2.0.0.11MacOSX中的Camino1.5.1:

    Mozilla/5.0(Macintosh;U;IntelMacOSX;en;rv:1.8.1.6)Gecko/20070809Camino/1.5.1上面都是基于Gecko的浏览器所取得的 user-agent 字串,区别只是版本有所不同。Mozilla版本5.0是自从首款基于Gecko发布后就一直不变,而且以后有可能也不会变²。

    WebKit

    2003年,Apple宣布发布首款他们自主开发的web 浏览器:Safari。它的呈现引擎叫WebKit。它是Linux中的web 浏览器 Konqueror呈现引擎KHTML的一个分支,几年后,WebKit的开源吸引了呈现引擎的开发人员。

    这款新浏览器和呈现引擎的开发人员也遇到了曾经IE3.0类似的问题:怎样才能溶入主流而不被踢出局?答案是:在 user-agent 字串中放详尽的信息,以便骗取网站的信任使它与其它流行的浏览器兼容。user-agent 字串格式如下:

    Mozilla/5.0(Platform;Encryption;OS-or-CPU;Language)AppleWebKit/AppleWebKitVersion(KHTML,likeGecko)Safari/SafariVersion下面是示例:

    Mozilla/5.0(Macintosh;U;PPCMacOSX;en)AppleWebKit/124(KHTML,likeGecko)Safari/125.1这又是个挺长的 user-agent 字串,其中包括的信息既有AppleWebKit的版本,也有Safari的版本。凡是基于WebKit的浏览器都将自己伪装成了Mozilla5.0,与基于Gecko浏览器完全一样。但Safari的版本是浏览器的构建版本号(buildnumber)。Safari1.25在 user-agent 字串中号为125.1(如上所示)。Safari版本3的 user-agent 字串包括了实际的Safari版本:

    Mozilla/5.0(Macintosh;U;PPCMacOSX;en)AppleWebKit/522.15.5(KHTML,likeGecko)Version/3.0.3Safari/522.15.5其中的“(KHTML,likeGecko)”在Safari1.0预览版本中就有了,这字串部分是最耐人寻味又饱受诟病。Apple的野心是为了让开发人员把Safari当成Gecko,所以采取了当初微软 IE user-agent 的类似做法:Safari是兼容Mozilla的,否则Safari用户会认为用的浏览器不受支持。

    而其它基于WebKit的浏览器与Safari不同的是,没有上面说的这个情况,所以检测断定浏览器是否基于WebKit比看有没有明确标Safari更有用。

    Konqueror

    Konqueror是款在KDELinux 桌面环境中的浏览器,基于KHTML开源呈现引擎。它只发布了在Linux的版本,但是拥有活跃的用户群。为了兼容性最大化,user-agent 字串的格式也紧跟IE的后尘:

    Mozilla/5.0(compatible;Konqueror/Version;OS-or-CPU)Konqueror3.2为了与WebKit user-agent 字串变化保持一致,它将KHTML作为它的标识:

    Mozilla/5.0(compatible;Konqueror/Version;OS-or-CPU)KHTML/KHTMLVersion(likeGecko)如下所示:

    Mozilla/5.0(compatible;Konqueror/3.5;SunOS)KHTML/3.5.0(likeGecko)Konqueror和KHTML的版本号比较一致,唯一的区别就是下点处不同,比如Konquerer3.5、KHTML3.5.1。

    Chrome

    GoogleChrome 浏览器以WebKit作为呈现引擎,JavaScript引擎却用了另一种。最初发布的版本是0.2,它的 user-agent 字串格式是在webKit信息的基础上又增加了如下:

    Mozilla/5.0(Platform;Encryption;OS-or-CPU;Language)AppleWebKit/AppleWebKitVersion(KHTML,likeGecko)Chrome/ChromeVersionSafari/SafariVersionChrome0.2 user-agent 信息的示例如下:

    Mozilla/5.0(Windows;U;WindowsNT5.1;en-US)AppleWebKit/525.13(KHTML,likeGecko)Chrome/0.2.149.29Safari/525.13虽我不敢完全保证,但很可能WebKit版本和Safari版本总会保持同步。

    Opera

    Opera 浏览器默认 user-agent 字串是现代浏览器中最合理的--正确的标识了它自己及其版本。在Opera8.0前,它的 user-agent 字串格式如下:

    Opera/Version(OS-or-CPU;Encryption)[Language]在WindowsXP中Opera7.54 user-agent 字串示例:

    Opera/7.54(WindowsNT5.1;U)[en]Opera8 user-agent 字串的语言部分移到了括号内。

    Opera/Version(OS-or-CPU;Encryption;Language)在WindowsXP中Opera8 user-agent 字串示例:

    Opera/8.0(WindowsNT5.1;U;en)当时Opera做为主流浏览器之一,它的 user-agent 字串是唯一使用产品名称和版本完全真实的标识了它自己。但是由于大量的浏览器嗅探代码在Internet上像蝗虫飞过般只吃标Mozilla产品名的 user-agent 字串,造成了Opera的 user-agent 字串发生了完全的改变。

    Opera9 user-agent 字串有两种修改的方式:一种方式是将自己标识为Firefox或IE浏览器。在这种方式下,user-agent 字串与Firefox或IE的几乎一样,只不过末尾附加了“Opera”及版本号。如下所示:

    Mozilla/5.0(WindowsNT5.1;U;en;rv:1.8.1)Gecko/20061208Firefox/2.0.0Opera9.50Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;en)Opera9.50前一字串将Opera9.5标识为Firefox2。后一字串将Opera9.5标识为IE6,在两个字串中都带有Opera版本信息。虽然这种方式是作为Firefox或IE打开的,但也能识别出Opera。另一种方法则是浏览器 user-agent 字串标识伪装成Firefox或IE,同时也找不到“Opera”字串及其版本信息。这样从字面上去区分Opera 浏览器便成了“不可能完成的任务”。

    结论

    user-agent 字串史可以说明曾对 user-agent 嗅探说不的原因:IE想要将自己识别为Netscape4,Konqueror和WebKit想要识别为Firefox,Chrome想要识别为Safari。这样使得除Opera外所有浏览器的 user-agent 嗅探区别很小,想要从一堆茫茫浏览器海洋中找出有用的标识太少了。关于嗅探要记住:一款浏览器与其它浏览器是兼容的,这样造成了不能完全准确的断定是哪款浏览器。

    比如说Chrome,它声称任何可以在Safari3访问的网站Chrome也都可以访问,但是对检测Chrome没有一点用。为了浏览器的兼容--这便是这个声明的理由。

    (完)

    译注1:IE3不是微软首款浏览器,请参考wiki的Timelineofwebbrowsers。

    译注2:这个是原作者的想法,译者不敢保证。

    译注3:Opera10的 user-agent 字串大家自己去看吧。

    Baiduspider

    是指在网页robots.txt文件里表示针对百度蜘蛛 禁止其访问及收录的内容

    Baiduspider的user-agent是什么?

    百度各个产品使用不同的user-agent:

    产品名称

    对应user-agent

    无线搜索

    Baiduspider

    图片搜索

    Baiduspider-image

    视频搜索

    Baiduspider-video

    新闻搜索

    Baiduspider-news

    百度搜藏

    Baiduspider-favo

    展开表格

    例如:

    User-agent:Baiduspider

    Disallow:/close.asp

    Disallow:/application.asp

    Disallow:/mdb/info.asp

    Disallow:/404.htm

    相关资讯
    内容声明

    1、本网站为开放性注册平台,以上所有展示信息均由会员自行提供,内容的真实性、准确性和合法性均由发布会员负责,本网站对此不承担任何法律责任。

    2、网站信息如涉嫌违反相关法律规定或侵权,请发邮件至599385753@qq.com删除。

    Copyright © 趣爱秀