13天前
|
|
|
111
原文讲述了浏览器 User-Agent 字符串的演变历史,以及它如何从最初的简单标识发展成一个混乱且几乎无用的存在。
## 起源:NCSA Mosaic
最初,只有 NCSA Mosaic 浏览器,它将自己标识为 `NCSA_Mosaic/2.0 (Windows 3.1)`。Mosaic 能够同时显示图片和文字,这在当时是一个巨大的进步。
## Netscape 的出现
后来,出现了一个名为 “Mozilla” 的新浏览器,意为 “Mosaic Killer”。但由于 Mosaic 不喜欢这个名字,所以最终更名为 Netscape。Netscape 将自己标识为 `Mozilla/1.0 (Win3.1)`。Netscape 支持框架(frames),这使得它在用户中非常流行。但是 Mosaic 不支持框架,因此出现了 “User Agent Sniffing” 技术,网站会向 “Mozilla” 发送框架,而向其他浏览器则不发送。
## 微软 Internet Explorer 的崛起
微软为了对抗 Netscape,推出了自己的浏览器 Internet Explorer,希望成为 “Netscape Killer”。Internet Explorer 也支持框架,但它不是 Mozilla,因此无法获得框架。为了尽快获得框架支持,Internet Explorer 开始伪装成 Netscape,将自己标识为 `Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)`。这样,Internet Explorer 就可以接收到框架了,微软对此感到非常高兴,但网站管理员却感到困惑。
微软将 IE 与 Windows 捆绑销售,并使其比 Netscape 更好用,第一次浏览器大战爆发了。最终,Netscape 被击败,微软取得了胜利。
## Netscape 的重生:Mozilla 和 Firefox
Netscape 并没有完全消失,它以 Mozilla 的身份重生了。Mozilla 构建了 Gecko 引擎,并将自己标识为 `Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826`。Gecko 引擎非常出色。Mozilla 后来演变成了 Firefox,并将自己标识为 `Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0`。Firefox 也非常出色。Gecko 引擎开始被广泛使用,许多其他浏览器都使用了它的代码,例如 Camino 和 SeaMonkey,它们都伪装成 Mozilla。
## Konqueror 的困境
Linux 的用户感到非常难过,因为他们构建了 Konqueror 浏览器,其引擎 KHTML 并不像 Gecko 那样受欢迎,无法获得好的网页支持。因此,Konqueror 开始伪装成 “like Gecko”,将自己标识为 `Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)`,这导致了更多的混乱。
## Opera 的选择
Opera 浏览器允许用户选择要伪装成的浏览器,因此 Opera 可以将自己标识为 `Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51`,或者 `Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51`,或者 `Opera/9.51 (Windows NT 5.1; U; en)`,具体取决于用户的选择。
## Safari 和 Chrome 的加入
Apple 构建了 Safari 浏览器,并使用了 KHTML 引擎,但添加了许多功能,并将其分叉为 WebKit。为了获得为 KHTML 编写的网页支持,Safari 将自己标识为 `Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5`,情况变得更糟。
Google 构建了 Chrome 浏览器,Chrome 使用了 WebKit 引擎,并且像 Safari 一样,希望获得为 Safari 构建的网页支持,因此 Chrome 也伪装成 Safari。
## 混乱的 User-Agent 字符串
最终,Chrome 使用 WebKit,并伪装成 Safari,WebKit 伪装成 KHTML,KHTML 伪装成 Gecko,所有浏览器都伪装成 Mozilla。Chrome 将自己标识为 `Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13`。User-Agent 字符串变得一团糟,几乎毫无用处,每个人都伪装成其他人,混乱不堪。
## 总结
User-Agent 字符串的历史是一个关于浏览器竞争和兼容性的故事。为了获得更好的网页支持,浏览器们不断地伪装自己,最终导致 User-Agent 字符串变得混乱不堪。现在,User-Agent 字符串已经失去了它最初的意义,并且不再是可靠的浏览器识别方式。
你有被 User-Agent 困扰过吗?
StackOverflow 上关于 User-Agent 的讨论:https://stackoverflow.com/questions/1114254/why-do-all-browsers-user-agents-start-with-mozilla