为什么所有浏览器的的 User-Agent 字符串开头都是 "Mozilla/"?
06-25 07:55 来源:OSCHINA 阅读(38)

你有没有注意过,几乎所有浏览器的 User-Agent 字符串开头都是 “Mozilla/”?


无论是 Chrome、Safari、还是 IE、Edge,都有 “Mozilla” 的痕迹。其实,这一切都源自一场 “浏览器伪装” 的历史闹剧。


这事得从 90 年代说起,那时互联网刚起步,第一个流行浏览器叫 Mosaic。后来,有人造出一款更强的浏览器,号称 “Mosaic Killer”,代号 Mozilla。


它上线后,不光能看图还能加载网页框架(frames),可谓是当年超前的黑科技。


很多网站为了兼容,只愿给 “Mozilla” 发完整版页面,其他浏览器只能看阉割版。


这就引发了一个问题:网站开始 “嗅探” 浏览器身份,也就是所谓的 User-Agent 识别。


后来,微软做了 Internet Explorer(IE),本来想正大光明竞争,但一看:网站只对 Mozilla 好,干脆就让自己也伪装成 Mozilla。


于是 IE 的 User-Agent 字符串成了这样:


Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)


就这样,IE 成功骗过了网站,用户数也提升了。


而这场 “伪装游戏” 一旦开始,就收不住了。


1、Firefox 自己引以为傲的 Gecko 渲染引擎,也以 Mozilla 自称:


Mozilla/5.0 (...) Gecko/... Firefox/...


2、Linux 社区做的浏览器,用的是 KHTML 引擎,他们开始模仿 Gecko 写法:


Mozilla/5.0 (...) (KHTML, like Gecko)


3、苹果搞了 Safari,用的是 WebKit,而 WebKit 是 KHTML 的一个分支:


Mozilla/5.0 (...) AppleWebKit/... (KHTML, like Gecko) Safari/...


4、到了谷歌 Chrome 时代,它用的也是 WebKit,为了吃到 Safari 的待遇,其 User-Agent 变成了这种奇葩组合:


Mozilla/5.0 (...) AppleWebKit/... (KHTML, like Gecko) Chrome/... Safari/...


到这时,每个浏览器都在 User-Agent 里堆满了 “族谱”:


Chrome 假装是 Safari


Safari 假装是 KHTML


KHTML 假装是 Gecko


Gecko 假装是 Mozilla


而真正的 Mozilla,其实早就不在了。


最后结果就是:User-Agent 成了一串 “你是谁并不重要,重要的是你要说自己是 Mozilla” 的魔性自报家门。


也难怪现在的前端开发者一边调试一边吐槽:“我到底在给谁写页面啊?”