不会再有 HTML6 了。

@chunpu 2018-08-08 17:23:24发表于 chunpu/blog

今年五月, 柏林 Novotel 酒店, W3C 主席 Jeff 面露遗憾的宣布, W3C 很快就会把 W3C HTML 标准指向 WHATWG HTML

时隔二十四年, HTML标准终于易主, 小编有幸亲历现场

W3C, 大名鼎鼎的万维网联盟

WHATWG, 名不见经传的技术工作小组, 他们称自己是松散的, 非正式的兴趣小组

那 HTML 标准怎么会从 W3C 手里落入这个 WHATWG 的手里呢?

这要从2004年的一次会议投票说起

WHATWG 的诞生

2004年夏季研讨会, W3C 发起了一场民意投票, 投票内容是: "W3C 是否应该继续扩展 HTML 成为 Web 应用"

8票同意, 11票反对

而上一个投票恰恰是 "W3C 是否应该大力发展XHTML", 19票同意, 0票反对

自此, HTML 退出 W3C 舞台, XHTML 标准成为赢家

那些投票给 HTML 的人只有两种选择: 放弃或离开W3C继续工作

他们选择了后者, 并注册了 whatwg.org, 于是 WHATWG 诞生了

翻滚吧! WHATWG

WHAT 是 Web Hypertext Application Technology 的缩写, WG 是 Working Group 的缩写

WHATWG 最初由 Apple, Mozilla, Opera 发起并成立

截至2018年, 它的成员是四个, Apple, Google, Microsoft, Mozilla

你也许会好奇创始人 Opera 去哪了? Opera 几年前放弃了自己的独立内核 Presto, 转投了 Chrome 的 Blink 内核, 从此成为了壳浏览器

WHATWG 成立后的第二年,W3C 暗示了想重新参与 HTML 开发的兴趣,并于2007年组建了工作组与 WHATWG 共同开发 HTML5 标准

后来的数年里 W3C 和 WHATWG 一同工作,然而到了2011年,两个工作组最终发现他们有着不同的目标

W3C 希望发布一个 "完成的" HTML5 版本,而 WHATWG 希望持续地维护一个 HTML Living Standard

持续地维护该标准而不是锁定在一个带着已知问题的状态, 同时按照需求增加新的特性来发展整个平台

从此 WHATWG 一直在开发 HTML 标准, W3C 则复制 WHATWG 的工作到他们的分支

这给 Web 开发者带来很多困惑, 两家标准到底谁才是 HTML 标准?

这种情况持续了很多年, 时至今日, W3C 终于放弃维护, 并将把 Recommend(推荐标准)直接指向 WHATWG

Web 开发者的困惑终于被解决, WHATWG 才是真实世界的事实标准

自此, HTML 标准再无封板一说, 它是一个持续维护, 不断迭代的标准, 也就是 Living Standard

HTML5 也成了一系列现代 Web 技术的统称, 换句话说, 我们再也看不见 HTML6 了

WHATWG 除了 HTML 标准之外还定制了其他我们耳熟能详的标准, 比如 DOM, FETCH, URL 等

HTML 历史回溯

1989年, Tim Berners-Lee 在 CERN 发明了万维网, 其中包括 HTML, URL, HTTP, Tim 根据 SGML 创造了 HTML

1994年初, IETF 成立了第一个HTML工作组, HTML 由 IETF 标准组织托管, IETF 是什么组织? 我们现在使用的 TCP/IP/HTTP 协议都是它制定的

1994年7月, HTML2 发布

1994年底, Tim Berners-Lee 创立 W3C 标准组织

1995年3月, HTML3 发布, 但从未被实现过

1997年12月, W3C 发布 HTML4.0, 并关闭了HTML工作组

1998年 W3C 发布 XML1.0 标准, 随后12月 W3C 发布 XHTML1.0

2004年4月, W3C研讨会投票, W3C 宣布放弃 HTML 转向 XHTML

2004年6月, 浏览器们成立 WHATWG 工作组

2009年, XHTML 工作组关闭

2018年8月, 绝大部分 W3C XML 工作组被关闭

W3C 的网页和 WHATWG 的网页有何不同

早期的 HTML 标准都基于 SGML, 而 WHATWG 的 HTML 不再基于 SGML

我们来看一个简单的表单勾选框

W3C 的网页是 XHTML(以下简称XHTML), 写法如下

<input type="checkbox" checked="checked" />

按照 WHATWG HTML(以下简称HTML5)的设定则如下

<input type=checkbox checked>

简单分析一下区别

  • HTML5 布尔属性如果是 true 则没有属性值, false 的话则不写; XHTML 则需要重复自己
  • HTML5 空元素(Void Element)不可以有任何内容, 也没有结束标签; XHTML 必须闭合
  • HTML5 属性值可以没有引号; XHTML 属性必须有引号

典型的布尔属性有 hidden, checked, disabled, readonly

典型的空元素有 br, hr, img, input, link, meta

网页到底是 text 还是 application?

我们知道 .html 文件的 MIME 是 text/html, 也就是说 html 属于文本

.xhtml 文件的 MIME 是

application/xhtml+xml

从一个小小的 MIME 类型变更, 我们可以一窥 W3C 当年的野心

是的, W3C 曾试图把网页变成应用, 这是多么超前的想法! 在IE时代我们就有了 Web App 的创想

然而几十年过去了, 我们看到网页依然属于 text/html

这不禁让我们想起另一个同为 application 的文件类型 application/json

text 代表松散, application 代表严格!

json 如果格式出错了, 是会 crash 的, 那如果 xhtml 格式出错了呢?

极度严格的 XHTML

不知道各位还记不记得这样的代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  </head>
  <body>
    <input type='checkbox' checked="checked">
  </body>
</html>

如果你曾在几年前写过网页, 可能也写过类似冗余的文档声明, 这是一个典型的 XHTML 网页的写法, 声明使用 Transitional 过渡标准

把这段代码保存为 hello.xhtml, 双击打开

一整个通栏的红色错误信息扑面而来

错误信息告诉我们少了一个 input 标签的结束标签

W3C XHTML 的准则:

每个错误都是致命的错误

仅仅因为这个小小的错误, 浏览器别无选择, 只能停止渲染网页并向用户显示错误消息

截至今日, 依然有数百万计的网页声明自己是 XHTML, 好在服务端开发依然使用 text/html 作为返回类型

如果你不知道你正在使用什么 MIME 类型,我几乎可以保证你还在使用 text/html, 否则现在绝大部分 XHTML 都不能正常运行

XHTML 在严格模式下甚至不能使用 target="_blank", 当时的主流浏览器, IE6-8 也并不支持 XHTML

为什么 W3C 对 XML 如此执着?

这个问题也可以反过来问, 为什么当年 W3C 放弃了 HTML?

W3C 认为 HTML 过于松散了, 比如下面这段 HTML 代码

<p><b>Mrs. Mary McGoon</b>
<br>
1401 Main Street
<br>
Anytown, NC 34829</p>

人类可以轻松看出这是一段联系人的地址, 但对于机器, 它们只知道如何去渲染这段文本, 却无从知道它的语义

但换做 XML 的话, 这段联系人地址应该这么写

<address>
  <name>
    <title>Mrs.</title>
    <first-name>
      Mary
    </first-name>
    <last-name>
      McGoon
    </last-name>
  </name>
  <street>
    1401 Main Street
  </street>
  <city>Anytown</city>
  <state>NC</state>
  <postal-code>
    34829
  </postal-code>
</address>

W3C 曾认为, XML 语言将彻底改变 Web, 我们可以从 <postal-code> 标签中直接获取邮政编码!

W3C 认为, XML 可以解决 HTML 的局限性, XML 可以让机器也看懂网页

二十年后的我们, 仿佛看懂了 W3C 当年的美好愿景,W3C 试图把各种东西都变成 XML 的子集或扩展, 比如 MathML, SVG 等

W3C 不仅希望 XML 用于文档展示, 也希望 XML 用来数据传输, 一切都基于 XML

事与愿违, 人们似乎并不在意机器能不能看懂网页

布局不乱, 内容能看才是我们的温饱线

于是 WHATWG 设定了截然相反的 HTML 准则: 不破坏向后兼容性

四大浏览器为什么对 XHTML 不能忍?

W3C 流程过于严格, 比如一个特性需要至少两个浏览器实现才可以进入标准

这也导致 W3C 的流程非常缓慢, 人们曾经预估, HTML5 如果属于 W3C 的话估计要等到2022年才能成为推荐标准

这会导致标准迭代缓慢, 周期长, 我们大部分时候看到的只是一个过时的有bug的标准

WHATWG 是寡头垄断吗?

在 W3C 做出让步的时候, 又一朵乌云笼罩在我们头上

四大浏览器组成的 WHATWG 是寡头垄断吗?

Google 发明了 AMP, 他的规则比 XHTML 更严格, 但它却要求网站都实现它

Google Chrome 占有60%的市场份额, 我们曾以为互联网是开放社区, 没想到依然是巨头说了算