浏览器内核,user-agent

本文详细解读了User-Agent字符串中的信息,并介绍了常见的浏览器内核类型及其发展历程,包括Trident、Gecko、Webkit和Blink等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近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。

### 360浏览器与谷歌浏览器User-Agent相似的原因 部分中国市场的浏览器,包括360浏览器,在设计其User-Agent字符串时选择了模仿其他主流浏览器的模式。具体来说,360浏览器PC端使用的User-Agent字符串包含了`Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)`这样的前缀[^1]。 实际上,这种做法并非特例。许多国内开发的浏览器为了兼容某些网站特定的功能或样式表,会选择模拟更常见的浏览器标识符。这主要是因为一些网站可能会根据User-Agent来决定页面渲染方式或是提供不同的功能选项。如果这些站点不支持未知类型的浏览器,则可能导致显示异常或其他问题。 对于360浏览器而言,“360SE”的存在作为唯一标识可以帮助区分该请求来自360安全浏览器而非其他产品。然而除了这个特殊标记外,其余部分确实与其他知名浏览器如Internet Explorer有较高的相似度,甚至可能引起混淆。 值得注意的是,虽然两者看起来很像,但这并不意味着它们具有相同的内核或者其他特性;相反,不同厂商的产品通常会有各自独特的实现细节和技术栈。 ```python # 这里展示了一个简单的Python脚本用于解析并比较两个User-Agent字符串 def compare_user_agents(ua1, ua2): # 去除版本号和其他变动因素后的基础结构对比 base_ua1 = " ".join(ua1.split()[:-1]) base_ua2 = " ".join(ua2.split()[:-1]) return base_ua1 == base_ua2 three_six_zero_ua = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; 360SE)' chrome_like_ua = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' print(compare_user_agents(three_six_zero_ua, chrome_like_ua)) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值