这是一篇技术文章的翻译+再创作,原文链接【link】
如果熟悉元素审查的童鞋,很多都会发现request headers中的user-agent基本都是以‘Mozilla’开头的
如我把博客编辑器元素审查一下,发现:
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6
那么,这到底是怎么回事呢?是与火狐有什么关系么?
原来,最早流行的浏览器是 NCSA Mosaic
它称自己为
NCSA_Mosaic/2.0 (Windows 3.1)
后来一个新浏览器出现了
它的名字叫Mozilla
,是 Mosaic Killer
的缩写,Mosaic
并不觉得这好笑,因此该浏览器改名为 Netscape
,它称自己为
Mozilla/1.0 (Win3.1)
Netscape
支持框架(frame
),而 Mosaic
不支持,这也就有了区分的余地。因此用户代理嗅探(User Agent sniffing
)出现了,如果网站检测到 Mozilla
,就发送框架,如果不是就不发送,俗称“看人下菜碟“。
而后M$(微软)开发了 IE
IE
也就是Internet Explorer
,微软希望它成为 Netscape Killer
,IE
也支持框架,但由于它不是 Mozilla
,所以网站没有向它发送框架。
微软十分不爽,也并没有耐心等待网站修改用户代理嗅探(User Agent sniffing
)去支持IE,而是声称它兼容于 Mozilla
,因此IE
冒充 Netscape
称自己为
Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)
骗过了网站得以收到网站发送的框架。
由于IE根植于遍地都是的Windows系统,于是第一次浏览器战争以 Netscape
的失利结束
但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
因为Gecko
好于 IE
,因此用户代理嗅探(User Agent sniffing
)又出现了,网站在检测到 Gecko
后会提供更好的页面代码。
Linux 上的浏览器 Konqueror
使用的渲染引擎是 KHTM
,它只能冒充Gecko
称自己为
Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)
Opera 则提供了选项,让用户想冒充哪个浏览器就冒充哪个浏览器。
Apple 后来创建了 KHTML
的一个分支 WebKit
,称自己为
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5