专栏首页程序员宝库为什么浏览器的用户代理字符串以 Mozilla 开头?

为什么浏览器的用户代理字符串以 Mozilla 开头?

为什么浏览器的用户代理字符串(user-agent string)以 Mozilla 开头?

最早流行的浏览器是 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 后就发送框架,如果不是就不发送。

后来微软开发了 IE,希望它成为 Netscape Killer,IE 也支持框架,但由于它不是 Mozilla,网站没有向它发送框架。

微软没有耐心等待网站修改,而是声称它兼容于 Mozilla,因此冒充 Netscape 称自己为 Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)。

第一次浏览器战争以 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,因此用户代理嗅探又出现了,网站在检测到 Gecko 后会提供更好的页面代码。

Linux 上的浏览器 Konqueror 使用的渲染引擎是 KHTM,它只能冒充 Gecko 称自己为 Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)。

Opera 则提供了选项,让用户想冒充哪个浏览器就冒充哪个浏览器。

苹果后来创建了 KHTML 的一个分支 WebKit,称自己为 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5。

这就是为什么浏览器的用户代理字符串以 Mozilla 开头。

觉得本文对你有帮助?请分享给更多人。

本文分享自微信公众号 - 程序员宝库(chengxuyuanbaoku)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一文读懂 WebSocket 通信过程与实现

    WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输。但它跟 HTTP 没什么关系,它是一种基于 TCP 的一种独立实现。

    程序员宝库
  • 更快更安全,HTTPS 优化总结

    在网站升级到 HTTPS 之后,我们还可以有很多玩意可以折腾,优化 HTTPS,让它更快更安全。这里是一篇 HTTPS 优化的总结,也包含问题的解决方法,不过不...

    程序员宝库
  • 我的编程之路:知识管理与知识体系

    本文的资料放到了Github Repo(https://github.com/wxyyxc1992/Coder-Knowledge-Graph)(本文介绍的这种...

    程序员宝库
  • 为什么所有浏览器的User Agent都带Mozilla

           最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持...

    Enjoy233
  • iCDO一周数据要闻:今年企业重点支出方向:云服务/BI/基础设施;华为仅占0.4%美国手机份额;无人配送车问世;及其他要闻

    1月29日 7-Eleven也要开无人便利店了,首店落地中国台湾名为“X-Store”

    iCDO互联网数据官
  • Spring Boot 从入门到实践系列教程(2)- 快速入门

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而...

    王炸
  • 为什么这段代码输出的是”Hello World”

    明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出的结果都是Hello world? 各位程序员,你们怎么看?请务必要独立思...

    哲洛不闹
  • 为什么这段代码输出的是”Hello World”

    明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出的结果都是Hello world? 各位程序员,你们怎么看?请务必要独立思...

    哲洛不闹
  • 宜信容器云排错工具集

    宜信容器云是一套基于kubernetes的容器管理平台。业务线用户在容器云上部署应用程序时,常常会遇到容器无法启动或者应用程序运行不正常的情况。为了方便用户排查...

    宜信技术学院
  • 写给开发人员的实用密码学 - 随机数

    上一篇文章中介绍了消息验证码,这篇文章咱们来聊聊随机数。随机数看起来是一个很简单的概念,不论哪种编程语言都提供了简单的生成随机数的方法,有必要单独写一篇文章么?

    云水木石

扫码关注云+社区

领取腾讯云代金券