我们接着介绍WebKit、Konqueror、Chrome、Opera浏览器用户代理字符串的历史,为我们接下来的检测作准备,虽然有一些我们用得很少,但也应该有个了解,说不定那一天成为主流了,我们再急急忙忙来准备就不太好.
5.WebKit
2003年,Apple公司宣布要发布自己的Web浏览器,名字定为Safari。Safari的呈现引擎叫WebKit,是Linux平台中Konqueror浏览器的呈现引擎KHTML的一个分支。几年后,WebKit独立出来成为了一个开源项目,专注于呈现引擎的开发。
这款新浏览器和呈现引擎的开发人员也遇到了与Intemet Explorer 3.0类似的问题:如何确保这款浏览器不被流行的站点拒之门外?答案就是向用户代理字符串中放入足够多的信息,以便站点能够信任它与其他流行的浏览器是兼容的。于是,WebKit的用户代理字符串就具备了如下格式:
Mozilla/5.0(平台;加密类型;操作系统或CPU;语言)AppleWebKit/AppleWebKit版本号
(KHTML, like Gecko) Safari/Safari版本号
以下就是一个示例:
Mozilla/5.0 (Macintosh;U; PPC Mac OS X;en) AppleWebKit/124 (KHTML, like Gecko)
Safari/125.1
显然,这又是一个很长的用户代理字符串。其中不仅包含了Apple WebKit的版本号,也包含了Safari的版本号。出于兼容性的考虑,有关人员很快就决定了将Safari标识为Mozilla。至今,基于WebKit的所有浏览器都将自己标识为Mozilla 5.0,与基于Gecko的浏览器完全一样。但Safari的版本号则通常是浏览器的编译版本号,不一定与发布时的版本号对应。换句话说,虽然Safari l.25的用户代理字符串中包含数字125.1,但两者却不一一对应。
Safari预发行1.0版用户代理字符串中最耐人寻味,也是最饱受诟病的部分就是字符串n(KHTML,like Gecko)“。Apple因此收到许多开发人员的反馈,他们认为这个字符串明显是在欺骗客户端和服务器,实际上是想让它们把Safari当成Gecko(好像光添加Mozilla/5.o还嫌不够)。Apple的回应与微软在IE的用户代理字符串遭到责难时如出一辙:Safari与Mozilla兼容,因此网站不应该将Safari
用户拒之门外,否则用户就会认为自己的浏览器不受支持。
到了Safari 3.0发布时,其用户代理字符串又稍微变长了一点。下面这个新增的Version记号一直到现在都被用来标识Safari实际的版本号:
Mozilla/5.0 (Macintosh;U; PPC Mac OS X; en) AppleWebKit/522.15.5 (KHTML, likeGecko) Version/3.0.3 Safari/522. 15.5
需要注意的是,这个变化只在Safari中有,在WebKit中没有。换句话说,其他基于WebKit的济览器可能没有这个变化。南昌网站设计公司技术人员认为,确定浏览器是否基于WebKit要比确定它是不是Safari更有价值——就像针对Gecko -样。
6.Konqueror
与KDE Linux集成的Konqueror,是一款基于KHTML开源呈现引擎的浏览器。尽管Konqueror只能在Linux中使用,但它也有数量可观的用户。为确保最大限度的兼容性,Konqueror效仿IE选择了如下用户代理字符串格式:
Mozilla/5.0 (compatible;Konqueror/版本号;操作系统或CPU)
不过,为了与WebKit的用户代理字符串的变化保持一致,Konqueror 3.2又有了变化,以如下格式将自己标识为KHTML:
Mozilla/5.o(compatible; Konqueror/版本号;操作系统或CPU)KHTML/ KHTML版本号(like Gecko)
下面是一个例子:
Mozilla/5.O(compatible; Konqueror/3.5; SunOS) KHTML/3.5.0(like Gecko)
其中,Konqueror与KHTML的版本号比较一致,即使有差别也很小,例如Konqueror 3.5使用KHTML 3.5.1。
7.Chrome
谷歌公司的Chrome浏览器以WebKit作为呈现引擎,但使用了不同的JavaScript引擎。在Chrome0.2这个最初的beta版中,用户代理字符串完全取自WebKit,只添加了一段表示Chrome版本号的信息,格式如下:
Mozilla/5.O(平台;加密类型;操作系统或CPU;语言)AppleWebKit/AppleWebKit版本号(KHTML,like Gecko) Chrome/ Chrome版本号Safari/ Safari版本Chrome 0.2给出的完整的用户代理字符串如下:Mozilla/5.0(Windows;U; Windows NT 5.1; en-US) AppleWebKit/525. 13 ( KHTML,like Gecko) Chrome/0.2.149. 29 Safari/525. 13
其中,WebKit版本与Safari版本看起来似乎始终会保持一致,尽管没有十分的把握①。
8.Opera
仅就用户代理字符串而言,Opera应该是最有争议的一款浏览器了。Opera默认的用户代理字符串是所有现代浏览器中最合理的——正确地标识了自身及其版本号。在Opera 8.0之前,其用户代理字符串采用如下格式:
Opera/版本号(操作系统或CPU;加密类型)[语言]
Windows XP中的Opera 7.54会显示下面的用户代理字符串:
Opera/7. 54 (Windows NT 5 .1;U) [en]
Opera 8发布后,用户代理字符串的“语言”部分被移到圆括号内,以便更好地与其他浏览器匹配,如下所示:
opera/版本号(操作系统或CPU;加密类型;语言)
Windows XP中的Opera 8会显示下面的用户代理字符串:
opera/8.O(Windows NT 5.1; U; en)
默认情况下,Opera会以上面这种简单的格式返回一个用户代理字符串。目前来看,Opera也是四大主要浏览器中@,唯一一个使用产品名和版本号来完全彻底地标识自身的浏览器。可是,与其他浏览器一样,Opera在使用自己的用户代理字符串时也遇到了问题。即使技术上正确,但因特网上仍然有不少浏览器嗅探代码,只钟情于报告Mozilla产品名的那些用户代理字符串。另外还有相当数量的代码则只对IE或Gecko感兴趣。Opera没有选择通过修改自身的用户代理字符串来迷惑嗅探代码,而
是干脆选择通过修改自身的用户代理字符串将自身标识为一个完全不同的浏览器。
Opera 9以后,出现了两种修改用户代理字符串的方式。一种方式是将自身标识为另外一个浏览器,如Firefox或者IE。在这种方式下,用户代理字符串就如同Firefox或IE的用户代理字符串一样,
只不过末尾追加了字符串Opera及Opera的版本号。下面是一个例子:
Mozilla/5.0(Windows NT 5.1;Uj en; rv:1.8.1)Gecko/200 61208 Fjrefox/2.0.O Opera 9.50
Mozilla/4.O(compatible; MSIE 6.Oj Windows NT 5.1;en) Opera 9.50
第一个字符串将Opera 9.5标识为Firefox2,同时带有Opera版本信息。第二个字符串将Opera 9.5
标识为IE 6,也包含了Opera版本信息。这两个用户代理字符串可以通过针对Firefox或IE的大多数测试,不过还是为识别Opera留下了余地。
Opera标识自身的另一种方式,就是把自己装扮成Firefox或IE。在这种隐瞒真实身份的情况下,用户代理字符串实际上与其他浏览器返回的相同——既没有Opera字样,也不包含Opera版本信息。
换句话说,在启用了身份隐瞒功能的情况下,无法将Opera和其他浏览器区别开来。另外,由于Opera喜欢在不告知用户的情况下针对站点来设置用户代理字符串,因此问题就更复杂化了。例如,打开My Yahoo!站点(http://www.yahoo.com)会自动导致Opera将自己装扮成Firefox。如此一来,要想识别Opera就难上加难了。
本文仅限内部技术人员学习交流,不得作于其他商业用途.文章出自:南昌网站建设公司-百恒网络 http://www.jxbh.cn 如转载请注明出处!