你有没有注意过,几乎所有浏览器的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”的魔性自报家门。
也难怪现在的前端开发者一边调试一边吐槽:“我到底在给谁写页面啊?”
感兴趣的小伙伴可以点击原文:https://webaim.org/blog/user-agent-string-history/