封面图是世界上第一台网页服务器的照片,即蒂姆·伯纳斯-李((Tim Berners-Lee)在 CERN 使用的 NeXT 计算机。
www,也就是万维网——World Wide Web,是一个很基础的概念,甚至在高中老师就已经教过了。
但今天在看一些博客网站的时候,突然注意到一件以前从来没有认真想过的事:有些网址是 www.阿巴阿巴.com,有些网址却只有 阿巴.com。
以前我一直以为,所有网站都有 www,只是浏览器觉得这几个字母可以不显示,替我们藏起来了。但今天仔细研究了一下,发现其实背后不止是浏览器的隐藏,其实现在的技术早就没有必要使用www了,更多的是历史遗留习惯,而且越来越多的网站也已经不再使用www了。
所以这篇文章主要是分享下www这个网址前缀的起源来历,后面再写一篇讲讲为什么后续又消失了,和现在我们都怎么使用域名。
先从技术上讲讲为什么会有www
最早期的互联网与现在的互联网从基础设施上就有很多差别,所以当初的很多协议和功能设计的初衷与现在也大不相同,所以如果好奇www为什么存在,我们或许需要从互联网的最开始讲起。
互联网初期-1969
大家通常认为的最早的互联网,或者说是互联网的前身 ARPANET (1969 年)诞生时,其连接的是几所大学和研究所的计算机,每台机器有一个主机名,直接注册在中心维护的 HOSTS.TXT 里(后来才被 DNS 替代)。

这个时候大家的初衷很简单,就是把几台机器连接起来,让他们可以相互通信。
因为机器很少,所以这个时候也还没有域名的概念,也不需要域名来多一层转换,只有"机器名→地址"的映射,这也足够了。
这段时间的发展具体可以看看这一篇文章,漫谈互联网历史【7】- ARPANET(虽然这个系列的其他文章与本文讨论的无关,但是写的真的很有意思,很推荐多去了解了解)
DNS的出现(域名)-1983
后面随着越来越多的机器加入,整个网络已经完全与以往不一样了。
在1983年的1月1日,所有连网主机从 NCP 切换到 TCP/IP,也被称为TCP/IP Flag Day。
所有的机器都停止支持旧协议,并同时支持TCP/IP,让以前“单网、扁平、中心化”的架构,变成了“多网、分层、可委托”的架构。 这样也满足了越来越多机器加入网络的需求。
随着越来越多的机器加入,原本由中心人力维护的 HOSTS.TXT 文件开始膨胀,在那时存储还不像今天这样量大管饱的时候,每台机器都要存储一个 HOST.TXT 文件愈发变得不现实,更难以接受的是,当时如果网络有些变动,管理员需要重新编译一遍 HOST.TXT 文件,然后通过 FTP 协议传输给所有机器,这通常一周更新一两次,这个延迟也是不可以接受的。
后来在 1983 年的 11 月 23 号,Paul Mockapetris(保罗·莫卡派乔斯) 设计 DNS,并提交了 RFC 882 和 RFC 883(后在1987年被 RFC 1034 / RFC 1035 替代)。

其核心思想可以总结为下面几条:
- 一致的名字空间:名字里不要塞网络号、地址、路由信息
- 分布式维护:全量数据库不能集中存,必须分片+缓存
- 管理权下放:谁拥有数据,谁控制更新/缓存策略
- 通用目录服务:不只查主机地址,还能查邮箱、以后未知类型
这样就保证了一个去中心化的(每个组织可以管理自己的机器的命名方式),方便网络更新的分布式系统。
www存在的前提
前面讲到了所有组织都可以自己管理自己的机器,组织通过自己分配域名的方式就可以很方便的进行职责分配。
虽然从1980年就有了端口技术,一台机器可以跑多种服务,但早期机器贵、资源少,没法让一台机器同时处理web服务和邮件服务,所以早期采用的方式是不同机器运行不同服务,就像下面这样:
ftp.example.com 文件传输
mail.example.com 邮件
news.example.com 新闻组
这同时带来的好处也有不少:
- 管理边界——邮件归系统管理员管,Web 归新来的网络组管,各管各的机器,互不背锅。
- 故障隔离——邮件服务崩了不能影响 Web,反之亦然。
- DNS 设计理念——域名系统一开始就是"主机名→IP"的映射,不是"服务名→IP"。你给每台机器起个名字,跑什么服务就叫什么名。
所以www本质上就是一个三级域名,没有任何特殊特权。
www的出现 -1989
1989 年 Tim (封面人物)在 CERN 提出了万维网概念,其重点不是简单规定网站前缀,呼吁大家都使用www作为网络服务域名,而是提出 URL/HTTP/HTML 这一套超文本系统,让文档可以跨机器互链、跨组织发布。
就比如CERN 第一台 Web 服务器用的是 info.cern.ch,不是 www.cern.ch。
到了 1990 年底,Tim 已经在 CERN 成功推出了第一个 Web 服务器和浏览器,从而证明了该提议背后的理念是可行的。他直接在 NeXT 计算机上编写了相关代码,并让这台服务器一直运行在办公室里。为了避免有人不小心关闭这台服务器,他在计算机上贴了一张用红墨水写的标签,上面写着:“这台机器是服务器,请勿关闭它!”

但 Web 作为一种新服务接入已有网络时,管理员通常会给它单独主机名。已有 ftp/mail/news 等按服务命名,Web 就沿用 www。
一点点后续 -1990s
www命名的流行或许也与Mosaic 浏览器的发布有关系。1993年,NCSA 发布 Mosaic,第一个让大众能看图、点链接的浏览器。NCSA 自己的 Web 服务器叫 www.ncsa.uiuc.edu。Mosaic 内置的书签和示例链接全是这个地址,全球用户第一次接触 Web 时看到的就是 www。

在后面的Yahoo(1994)、Amazon(1994)、eBay(1995)这几个商业互联网的出现,其新网址也都沿用了www前缀。也因此被大众所熟知。
Why www?
那么这么多名字为什么要用www呢?
其实这个问题也有人曾经发邮件问过Tim,可以点击链接看下 Tim 给的解释。
我在这里简单翻译总结下:
- www 是他"建议"的,不是"规定"的
"It is a convention. I suggested it early on, in this guide..."
他在一个 Style Guide(写给 webmaster 的指南)里建议的,就是他写了篇文章说"你们可以这么干"。
- 为什么不用机器本来的名字?
"An alias was a better alternative to 'pegasus.foo.com' which typically resulted when someone who happened to have a machine called pegasus started to run a web server..."
他的意思是:早期很多人随便拿手边一台叫 pegasus 的机器跑 Web,结果别人访问就得用 pegasus.foo.com。这名字毫无意义,用户记不住,也看不出这是干啥的。
所以他建议:起个别名叫 www,一看就知道是 Web 服务器。
- 为什么选 "www" 这三个字母?
因为已有的惯例就是按服务缩写命名: 他只是把 Web 也塞进了这个已有的命名体系里。选 www 不是因为它特别,是因为它跟 ftp、mail 一个套路。
- 为什么不直接用裸域 foo.com?
他说了两个原因:
"Typically early webmasters could not have comandeered the 'foo.com' address itself."
意思是:裸域 foo.com 是域的"根标识",通常由系统管理员控制,早期跑 Web 的人(webmaster)没权限去改裸域的 DNS 记录。他们只能在自己能控制的范围内加个子域。
"You don't have this flexibility of configuration if you point everyone at 'foo.com' itself for all services."
另一个原因是灵活性:用别名 www,以后 Web 服务长大了,可以轻松把 www 指向一台更大的机器,不影响裸域和其他服务。
一个有趣的细节
Tim 在回答的最后说到他是 "of two minds about it now"(现在对此心情复杂)。
因为到 1999 年,Web 已经成了很多公司最大的服务,他觉得也许该让 Web 占住裸域了。但他同时强调:只能选一个,不能两个都当主站,否则缓存效率减半。
这也与我们下一篇讲现在网络为什么又不使用www,而是可以直接链接裸域名的想法一致。
- Author:Mark Xu
- Copyright:All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating otherwise.

