导读
01
要讲清楚这个话题,我们要从 1990 年说起。
1990 年,英国计算机科学家蒂姆·伯纳斯·李巧妙地提出了 HTTP 协议,然后又编写了世界上第一个浏览器 World Wide Web,万维网就此诞生。
1993 年,美国国家超级电脑应用中心(NCSA)推出了一款叫做 Mosaic(马赛克) 的浏览器,它第一次将图片与文字同时在一起展示。
从此,浏览器就变得有趣且流行起来。
为了发挥 Mosaic 浏览器的优势,Mosaic 浏览器在访问网页时,会事先向网页服务器发送一段特定的字符串来标记自己,这样使用 Mosaic 的用户能收到有图片的内容了。
这个字符串 Mosaic/2.0(Windows 3.1) 就是 UserAgent,简称 UA,中文叫作“用户代理”。
从此,浏览器 UA 作为一种“根据用户软硬件环境,进而采用不同内容策略”的技术诞生了。
02
1994 年,Mosaic 项目的核心成员马克·安德森离职,然后发布了一款全新的浏览器 Mozilla。
Mozilla 除了是 Godzilla 的谐音外,它还是 Mosaic Killa 的缩写,意思是要做 Mosaic 的终结者。
然而在 Mosaic 的压力之下, Mozilla 还是改名为了 Netscape(网景)浏览器。
不过在设置浏览器 UA 时,Netscape 仍然使用了 Mozilla 的名字,也就是 Mozilla/1.0 (Win3.1)。
接着,Netscape 浏览器率先支持了网页框架技术,而其他浏览器要么不支持,要么支持的不够好,Netscape 很快成为当时最流行的浏览器。
1995 年,微软宣布进军互联网,然后发布了 IE 浏览器。
尽管 IE 浏览器同样也支持框架技术,但总是收不到有框架的页面,原因是网页服务器会先检测浏览器 UA 中是否包含有 Mozilla。
如果有,那就发送有框架的页面,如果没有,那就发送不含框架的页面。
微软等不及市场的反应,于是在 IE 浏览器的 UA 中加入了 Mozilla 的字样,也就是 Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)。
这样 IE 浏览器就能正常接收到有框架的页面了。
于是,浏览器 UA 也成为了解决浏览器兼容性的一个重要手段。
03
没过多久,微软采用了将 IE 与 Windows 捆绑销售的策略,Netscape 浏览器被打败退出历史舞台。
不甘失败的 Netscape 团队在 2004 年又推出了一款新的浏览器 Firefox。
Firefox 浏览器使用的 Gecko 引擎非常优秀,为了告诉大家,我使用了这个引擎,于是就加入到了浏览器的 UA 里:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041108 Firefox/1.0
由于 Gecko 的出色和 IE 的止步不前,浏览器 UA 的探测规则发生了变化。
使用 Gecko 引擎的浏览器可以得到更好的网页代码,而其他的浏览器则没有这种待遇。
Linux 的追随者对此很难过,因为他们开发了基于 KHTML 引擎的 Konqueror 浏览器,他们认为 KHTML 和 Gecko 一样出色,但却因为不是 Gecko 而得不到好的页面。
于是他们宣布 KHTML 兼容 Gecko(like Gecko),浏览器 UA 就变成了:
Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)。
一直使用自主 UA 的浏览器 Opera 也同样有这样的问题。
但 Opera 不是简单地把自己也标记为 Gecko,而是主张让用户来决定变成什么样的浏览器。
于是 Opera 在菜单里增加了浏览器 UA 的选项,让用户来选择是变成 IE 还是 Firefox,又或者是它自己本体。
2003 年,苹果公司从 KHTML 引擎中分支出来了 Webkit,然后开发了 Safari 浏览器。
为了兼容性的考虑,于是苹果将 KHTML 内核 UA 中 的 Mozilla、KHTML、Gecko 统统继承了下来,变成了:
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5。
2008 年,谷歌使用了苹果的 Webkit 开发出了 Chrome 浏览器。
和 Safari 一样,Chrome 浏览器也想兼容那些为 Safari 专门编写的页面,于是就继承了 Safari 的 UA,然后再加入自己的 UA:
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。
如果要问谁是“伪装之王”,那一定非 Edge 莫属了。
2020 年,微软转用谷歌的 Chromium 内核开发 Edge 浏览器,为了不再受兼容性的困扰,Edge 浏览器几乎将所浏览器的 UA 都加入了进来,于是就有了:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/90.0.4430.70 Safari/537.36 Edg/90.0.818.38
如果把 UA 的伪装比作是“俄罗斯套娃”的话,我们会发现:
Edge 伪装成 Chrome,Chrome 伪装成 Safari,Safari 伪装成 KHTML,KHTML 伪装成 Gecko,Gecko 和 IE 又伪装成 Mozilla,最终,所有浏览器的 UA 都以 Mozilla 开头。
尽管 Mozilla 作为一个浏览器而言,早已从市场上消失。
04
结尾