浏览器内核,user-agent

最近web界被红芯事件吵得沸沸扬扬,也激起了我对浏览器内核进一步的学习热情。

先来看看user-agent,它是我们前端开发获取用户操作系统,浏览器版本等数据的常用方法:

UA存在于每次http请求的请求头中,像这样

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36

根据MDN上的描述,上面的字段有着多种多种声明信息,大致分以下几块

1. Mozilla/5.0  

这是浏览器通用标识,几乎所有浏览器都会带,至于为什么,这里有一篇有趣的文章 —— 为什么浏览器User-agent总是有Mozilla字样——User-agent String里的历史故事。大致上是说早年Mozilla浏览器支持一些好的技术,所以网页开发者会对它和其它浏览器区别对待,这引发了其它浏览器厂商的不满,又没法普及自己浏览器的支持性,就冒充Mozilla以获得更好的浏览体验。

2. (Windows NT 10.0; WOW64)

括号里是操作平台,包含了浏览器运行所在平台的操作系统,比如win10 64位,这里还可以包含手机操作系统;如

(iPhone; CPU iPhone OS 11_0 like Mac OS X) 这是iphone6的操作平台操作系统位OS11

3. AppleWebKit/537.36 (KHTML, like Gecko)

第三部分就是我们最常说的内核(渲染引擎/排版引擎,Rendering Engine),也就是HTML的排版引擎,对浏览器来说有着举足轻重的作用,目前市场上的内核主要有

  • Trident —— 它是IE浏览器的标志之一,国内的双核浏览器的兼容模式用的就是Trident。
  • Gecko —— 由NetScape公司研发,目前由Mozilla基金会开发维护的开源项目,曾经红极一时的Firefox就是使用的它
  • Webkit —— 由苹果公司研发,是目前最强大,最普及也最时尚的浏览器内核,市场占有率很高,像safari / edge / Chrome 等都用的appleWebkit。
  • Blink —— 由谷歌推出,与opera合作开发的新浏览器内核(2013年),现今两者都用的blink。这也是为了摆脱对webkit的依赖和保护浏览器生态(webkit2与chrome沙箱设计模式发生冲突造成的)。

有趣的是,chrome和opera虽然用的blink内核,但在user-agent上却没有体现(仍然写的appleWebkit)。这也是为了兼容性,web开发者都习惯了将webkit作为兼容性最好的内核, 为了更好地浏览器体验,就沿用了webkit字段。

4. Chrome/67.0.3396.99 Safari/537.36

这是浏览器的版本,表示至少支持以上两个浏览器版本。

总结:这个user-agent里并非所有字段都真实,各浏览器厂商为了更好地兼容,各种伪装,是的UA显得很混乱,所以字段内容要适当采选,避免bug。

你可能感兴趣的:(user-agent,浏览器内核,渲染引擎)