你是否好奇标识浏览器身份的User-Agent,为什么每个浏览器都有Mozilla字样?

故事还得从头说起,最初的主角叫NCSA Mosaic,简称Mosaic(马赛克),是1992年末位于伊利诺伊大学厄巴纳-香槟分校的国家超级计算机应用中心(National Center for Supercomputing Applications,简称NCSA)开发,并于1993年发布的一款浏览器。它自称“NCSA_Mosaic/2.0(Windows 3.1)”,Mosaic可以同时展示文字和图片,从此浏览器变得有趣多了。

然而很快就出现了另一个浏览器,这就是著名的Mozilla,中文名称摩斯拉。一说 Mozilla = Mosaic + Killer,意为Mosaic杀手,也有说法是 Mozilla = Mosaic & Godzilla,意为马赛克和哥斯拉,而Mozilla最初的吉祥物是只绿色大蜥蜴,后来更改为红色暴龙,跟哥斯拉长得一样。但Mosaic对此非常不高兴,于是后来Mozilla更名为Netscape,也就是网景。Netscape自称“Mozilla/1.0(Win3.1)”,事情开始变得更加有趣。网景支持框架(frame),由于大家的喜欢框架变得流行起来,但是Mosaic不支持框架,于是网站管理员探测user agent,对Mozilla浏览器发送含有框架的页面,对非Mozilla浏览器发送没有框架的页面。

后来网景拿微软寻开心,称微软的Windows是“没有调试过的硬件驱动程序”。微软很生气,后果很严重。此后微软开发了自己的浏览器,这就是Internet Explorer,并希望它可以成为Netscape Killer。IE同样支持框架,但它不是Mozilla,所以它总是收不到含有框架的页面。微软很郁闷很快就沉不住气了,它不想等到所有的网站管理员都了解IE并且给IE发送含有框架的页面,它选择宣布IE是兼容Mozilla,并且模仿Netscape称IE为“Mozilla/1.22(compatible; MSIE 2.0; Windows 95)”,于是IE可以收到含有框架的页面了,所有微软的人都嗨皮了,但是网站管理员开始晕了。

因为微软将IE和Windows捆绑销售,并且把IE做得比Netscape更好,于是第一次浏览器血腥大战爆发了,结果是Netscape以失败退出历史舞台,微软更加嗨皮。但没想到Netscape居然以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”。Firefox性能很出色,Gecko也开始攻城略地,其他新的浏览器使用了它的代码,并且将它们自己称为“Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1”,以及“Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0”,每一个都将自己装作Mozilla,而它们全都使用Gecko。

Gecko很出色,而IE完全跟不上它,因此user agent探测规则变了,使用Gecko的浏览器被发送了更好的代码,而其他浏览器则没有这种待遇。Linux的追随者对此很难过,因为他们编写了Konqueror,它的引擎是KHTML,他们认为KHTML和Gecko一样出色,但却因为不是Gecko而得不到好的页面,于是Konqueror为得到更好的页面开始将自己伪装成“like Gecko”,并自称为“Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)”。自此user agent变得更加混乱。

这时更有Opera跳出来说“毫无疑问,我们应该让用户来决定他们想让我们伪装成哪个浏览器。”于是Opera干脆创建了菜单项让用户自主选择让Opera浏览器变成“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51”,或者“Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51”, 或者“Opera/9.51 (Windows NT 5.1; U; en)”。

后来苹果开发了Safari浏览器,并使用KHTML作为渲染引擎,但苹果加入了许多新的特性,于是苹果从KHTML另辟分支称之为WebKit,但它又不想抛弃那些为KHTML编写的页面,于是Safari自称为“Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5”,这进一步加剧了user agent的混乱局面。

因为微软十分忌惮Firefox,于是IE重装上阵,这次它自称为“Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ”,并且渲染效果同样出色,但是需要网站管理员的指令它这么做才行。

再后来,谷歌开发了Chrome浏览器,Chrome使用Webkit作为渲染引擎,和Safari之前一样,它想要那些为Safari编写的页面,于是它伪装成了Safari。于是Chrome使用WebKit,并将自己伪装成Safari,WebKit伪装成KHTML,KHTML伪装成Gecko,最后所有的浏览器都伪装成了Mozilla,这就是为什么所有的浏览器User-Agent里都有Mozilla。Chrome自称为“Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13”。

因为以上这段历史,现在的User-Agent字符串变得一团糟,几乎根本无法彰显它最初的意义。追根溯源,微软可以说是这一切的始作俑者,但后来每一个人都在试图假扮别人,最终把User-Agent搞得混乱不堪。

各大浏览器诞生年表:

  • 1993年1月23日:Mosaic
  • 1994年12月:Netscape
  • 1994年:Opera
  • 1995年8月16日:Internet Explorer
  • 1996年10月14日:Kongqueror
  • 2003年1月7日:Safari
  • 2008年9月2日:Chrome

浏览器 user-agent 字符串的故事相关推荐

  1. 浏览器模式用户代理字符串(IE)

    问题 问题描述 今天在做项目的时候,QA部门提了一个Bug,在一个搜索列表中,搜索栏为空时刷新页面,却触发了搜索功能,并且列表显示出<未搜索到结果> 环境 IE11 问题原因 QA的IE1 ...

  2. 各浏览器的用户代理字符串整理

    每个浏览器都有它自己的用户代理(user agent)字符串,里面包含了浏览器和操作系统等信息.通过使用这个字符串,我们可以处理跨浏览器的差异.用户代理字符串保存在 JavaScript 的 navi ...

  3. 为什么浏览器的user-agent字符串以'Mozilla'开头呢?

    这是一篇技术文章的翻译+再创作,原文链接[link] 如果熟悉元素审查的童鞋,很多都会发现request headers中的user-agent基本都是以'Mozilla'开头的 如我把博客编辑器元素 ...

  4. Windows 系统IE各版本浏览器的用户代理字符串

    Windows 系统IE各版本浏览器的用户代理字符串 IE9:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0 ...

  5. 爬虫工具|输入浏览器header内容字符串,自动格式化为字典类型

    背景 一般我们进行网络资源的爬取操作时,通常需要把浏览器中的request header的内容复制出来,放在脚本中进行操作. 通常我们是手动在每个key和value的两边都加上'',但是这种方法比较麻 ...

  6. java useragent 360 遨游 火狐_Chrome与火狐修改浏览器User Agent教程

    UA怎么改?当我们使用不同的浏览器访问到网站时,它将会告诉网站该浏览器的有不同的设备与UA类型,详见:User Agent 是什么? 某些网站可能有意或无意间关闭了对于某些浏览器的响应. 由于浏览器总 ...

  7. 浏览器User Agent Switcher Options实现模拟浏览器 附(UA下载)

    电脑浏览器调试手机站怎么办? 看看这个浏览器的User Agent Switcher Options (只添加了火狐.谷歌的...) 话不多说,大家安装完毕效果就有了. 需要准备: 1. 安装浏览器插 ...

  8. 各浏览器User-Agent用户代理字符串整理

    一.基础知识篇: HttpHeader之User-Agent UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA.它是一个特殊字符串头,是一 ...

  9. 移动端判是微信浏览器还是QQ浏览器--User Agent

    移动端开发中有时候需要区分微信浏览器或者QQ浏览器,那么就需要判断用户代理 User Agent 下面附上一般浏览器的用户代理,可以在PC浏览器上模拟微信或者QQ,从而达到调试的目的 UA模拟QQ和微 ...

最新文章

  1. TF之DeepDream:DeepDream前世今生之简介、安装、使用方法之详细攻略
  2. 我们距离“云”还有多远?
  3. 哈工大人工智能研究院院长刘劼:AIoT 核心在“智”不在“联”,需云边端协同...
  4. cups支持的打印机列表_网络存储让你的打印机瞬间变无线,打印文件不用愁
  5. linux 连接两个异构网,用cheops-ng管理Linux异构网络(图)
  6. macOS 运行react项目
  7. 请慎用ASP.Net的validateRequest=false属性
  8. Windows 常用软件清单
  9. Java、JSP基于Java的题库管理系统的设计与实现
  10. [ 数据集 ] MINIST 数据集介绍
  11. 冒险岛2计算机内存不足建议使用,冒险岛2游戏设置详解 低配电脑如何流畅运行冒险岛2...
  12. Apache网页优化
  13. 表格找不到任何要替换的数据,不能替换受保护的工作表中的数据。
  14. PHP编写rss源(续)
  15. [Simulink] 代数环问题笔记
  16. K-means算法和K临近算法
  17. 20211115 任意n阶方阵均与三角矩阵(上三角或者下三角)相似
  18. GitHub 详细教程
  19. 电脑“C盘”快满了,怎么清理?
  20. MATLAB处理音频文件基本用法

热门文章

  1. linux 7.4 不能转发dns_linux深度攻略学习
  2. qt 中的 quit() close()与 exit()
  3. mysql 多项式_多项式拟合和最小二乘问题
  4. 软件项目管理0819:一页项目管理——风险,定性问题和其他评价指标
  5. 笔记-项目范围管理-项目范围说明书
  6. Python中使用httpx模块详解
  7. Mysql、Oracle、SQLServer等数据库参考文档免费分享下载
  8. C#中使用FilleStream实现视频文件的复制
  9. cordova项目怎样修改版本号
  10. order by、group by也会使用索引?使用这俩关键字的时候索引什么时间会失效