这篇文章一起来捋一捋 Web 标准相关的知识,Web 开发中会涉及到哪些标准规范,而这些标准规范又是由谁制定发布的。
1 制定标准的组织机构
标准和规范都不是凭空出现,它们大都在实践中产生,并由一些组织机构进行标准化。
部分标准化组织
- International Telecommunications Union (ITU) 国际电信联盟,成立于1865年
- American Society of Mechanical Engineers (ASME) 美国机械工程师协会,成立于1880年
- American Society for Testing Materials (ASTM) 美国材料与试验协会,成立于1882年
- British Standards Institution (BSI) 英国标准学会,成立于1901年
- International Electrotechnical Commission (IEC) 国际电工委员会,成立于1906年
- Deutsches Institut für Normung e.V. (DIN, en: German Institute for standardization) 德国标准化协会,成立于1917年
- American National Standards Institute (ANSI) 美国国家标准学会,成立于1918年
- Association Française de Normalisation (AFNOR, en: French Standardization Association) 法国标准化协会,成立于1926年
- International Organization for Standardization (ISO) 国际标准化组织,成立于1946年
- Japanese Industrial Standards Committee (JISC) 日本工业标准调查会,成立于1949年
- European Computer Manufacturers Association (ECMA) 欧洲计算机制造商协会,成立于1961年
- Ecma International Ecma 国际,1994年“ECMA”更名为“Ecma 国际”
- European Committee for Standardization (CEN) 欧洲标准化协会,成立于1961年
- European Committee for Electrotechnical Standardization (CENELEC) 欧洲电工标准化委员会,成立于1976年
- China Association for Standardization (CAS) 中国标准化协会,成立于1978年
- Institute of Electrical and Electronics Engineers (IEEE) 电气和电子工程师协会,成立于1985年
- Internet Engineering Task Force (IETF) 互联网工程任务组,成立于1986年
- Internet Assigned Numbers Authority (IANA) 互联网数字分配机构,成立于1988年
- European Telecommunications Sdandards Institute (ETSI) 欧洲电信标准化协会,成立于1988年
- Unicode Consortium 统一码联盟,成立于1991年
- Asia-Pacific Network Information Center (APNIC) 亚太互联网络信息中心,成立于1993年
- World Wide Web Consortium (W3C) 万维网联盟,成立于1994年
- American Registry for Internet Numbers (ARIN) 美国互联网号码注册中心,成立于1997年
- China Internet Network Information Center (CNNIC) 中国互联网络信息中心,成立于1997年
- Internet Corporation for Assigned Names and Numbers (ICANN) 互联网名称与数字地址分配机构,成立于1998年
- Standardization Administration of the People’s Republic of China (SAC) 中华人民共和国国家标准化管理委员会,成立于2001年
- International Digital Publishing Forum (IDPF) 国际数字出版论坛,2017年与W3C合并
- Khronos Group 科纳斯组织,成立于2000年
- Web Hypertext Application Technology Working Group (WHATWG),Web 超文本应用技术工作组,成立于2004年
这些标准化组织都和哪些标准或者规范相关
最常见的计算机编码标准 ASCII,由美国标准学会(American Standards Association,ASA)在1963年发布,ASA 也就是后来的美国国家标准学会(ANSI)。
截至2019年7月,国内的计算机软件必须支持的 GB 18030 编码标准,即“GB 18030-2005 信息技术 中文编码字符集 Information technology - Chinese coded character set”由国家质量监督检验检疫总局和国家标准化管理委员会于2005年发布。
注:中国国家标准主要分为强制性标准(代号为“GB”,即“国标”汉语拼音的首字母)和推荐性标准(代号为“GB/T”,其中“T”为“推”的汉语拼音首字母)两类。
Unicode 字符集以及 Emoji 表情由统一码联盟(Unicode Consortium)制定发布。
C语言,于1972年由 Dennis Ritchie 设计,1989年由美国国家标准学会(ANSI)进行标准化,并发布 ANSI X3.159-1989,即“C89”标准,1990年被国际标准化组织(ISO)采纳为 ISO/IEC 9899 标准,即“C90”。
常见的 IEEE 754 二进制浮点数算术标准,IEEE 802.11 无线网标准,操作系统的 POSIX 标准(IEEE 1003)等都由电气和电子工程师协会(IEEE)制定。
TCP,UDP,IP,DNS,HTTP/1.1,HTTP/2,WebSocket,URL,SMTP……这些互联网基础协议,都由互联网工程任务组(IETF)制定发布,如 HTTP/1.1 协议草案标准 RFC 2616,URI 语法标准 RFC 3986 等,互联网工程任务组(IETF)发布的标准即通常所说的 RFC 文档。
互联网数字分配机构(IANA)负责全球互联网域名系统的设计、维护及地址资源分配,亚太互联网络信息中心(APNIC)负责亚洲与太平洋地区的IP地址资源分配与管理,中国互联网络信息中心(CNNIC)的职能类似。2016年,美国将互联网数字分配机构(IANA)职能管理权移交给互联网名称与数字地址分配机构(ICANN)。互联网名称与数字地址分配机构(ICANN)负责在全球范围内对互联网唯一标识符系统及其安全稳定的运营进行协调,包括互联网协议(IP)地址的空间分配、协议标识符的指派、通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理。
文件媒体类型,如 text/plain
(纯文本),text/html
(HTML),application/json
(JSON),application/javascript
(JavaScript),申请和分配由 IANA 管理。
HTML,CSS,XML,XHTML,DOM,SVG,Canvas,Web works……之类的 Web 标准则由万维网联盟(W3C)制定发布。2017年,负责 EPUB 数字出版格式的国际数字出版论坛(IDPF)在与万维网联盟(W3C)合并。2019年,HTML 和 DOM 标准正式由 Web 超文本应用技术工作组(WHATWG)负责制定。
OpenGL,OpenGL ES,OpenCL,OpenXR,WebGL……之类图形相关的标准由科纳斯组织(Khronos Group)制定发布。
JavaScript 语言,于1995年由 Brendan Eich 设计,1996年由 Netscape 公司提交到 Ecma International 协会进行标准化,1997年发布 ECMA-262 标准,即 ECMAScript,后被国际标准化组织(ISO)采纳为 ISO/IEC 16262 ECMAScript language specification 标准。
数据交换格式 JSON,于2000年由 Douglas Crockford 设计,2013年被标准化为 RFC 7158 和 ECMA-404 标准,2017年,RFC 7158 被 RFC 8259 取代,同时被国际标准化组织(ISO)采纳为 ISO/IEC 21778:2017 标准。
标准之间的关系
不同组织之间有很多重合的标准,因为很多标准会同时被多个组织采纳,或者国家标准、行业标准后来发展成为国际标准。如 ECMA/ANSI/IEEE 等组织机构制定的一些标准,它们同时也可能是 ISO 标准:
- ECMA-6 7-bit Coded Character Set 对应 ISO/IEC 646:1991
- ECMA-35 Character Code Structure and Extension Techniques 对应 ISO/IEC 2022:1994
- ECMA-48 Control Functions for Coded Character Sets 对应 ISO/IEC 6429:1992
- ANSI X3.159 Programming languages - C (ANSI C) 对应 ISO/IEC 9899
- IEEE 1003.1 Portable Operating System Interface (POSIX) 对应 ISO/IEC 9945
2 W3C 万维网联盟
W3C 的标准种类
W3C 标准的文档主要有以下几类:
- Editor’s Draft (ED) 编辑草案
- Working Draft (WD) 工作草案
- Last Call Working Draft (LC) 最终工作草案
- Candidate Recommendation (CR) 候选推荐标准
- Proposed Recommendation (PR) 提案推荐标准
- W3C Recommendation (REC) W3C 推荐标准
- An Edited Recommendation 被编辑的推荐标准
- An Amended Recommendation 被修正的推荐标准
- An Superseded Recommendation 被取代的的推荐标准
- An Obsolete Recommendation 过时的推荐标准
- Rescinded Recommendation 已撤销的推荐标准
- Working Group Note, Interest Group Note (NOTE) 工作组备忘,兴趣组备忘
W3C 发布的标准被称为 Technical Report (TR) 技术报告。
W3C 的工作流程可以浏览 W3C Process Document。
W3C 的工作组织
- Working Group (WG) 工作组
- HTML Working Group HTML 工作组
- CSS Working Group (CSSWG) CSS 工作组
- WebAssembly Working Group WebAssembly 工作组
- Audio Working Group 音频工作组
- Timed Text Working Group 时序文本工作组
- Accessible Rich Internet Applications Working Group 可访问富互联网应用(ARIA)工作组
- Accessibility Guidelines Working Group 可访问性指南工作组
- Web Performance Working Group Web 性能工作组
- Web Authentication Working Group Web 认证工作组
- Immersive Web Working Group 沉浸式 Web 工作组
- Second Screen Working Group 第二屏工作组
- ……
- Interest Group (IG) 兴趣组
- Internationalization Interest Group 国际化兴趣组
- Chinese Web Interest Group Web 中文兴趣组
- ……
- Community Group (CG) 社区组
- Web Incubator Community Group (WICG) Web 平台孵化社区组
- WebAssembly Community Group WebAssembly 社区组
- EPUB 3 Community Group EPUB 3 社区组
- Responsive Issues Community Group (RICG)
- Credentials Community Group 凭证社区组
- Immersive Web Community Group 沉浸式 Web 社区组
- Data Visualization Community Group 数据可视化社区组
- Chinese Digital Publishing Community Group 中文数字出版社区组
- Chinese Accessibility Community Group 中国信息无障碍社区组
- ……
- Business Group (BG) 商务组
- Publishing Business Group 出版商务组
- Task Force 特别任务组
- Chinese Layout Requirement Task Force 中文文字布局需求特别任务组
- CSS-TAG Houdini Task Force (CSS Houdini)
- CSS-SVG Effects Task Force (FX TF)
- ……
- ……
W3C 的标准
见 W3C 标准。
如何参与 W3C 不同阶段的意见征集
以下内容摘自 W3C 中国。
- 在第一版工作草案(First Public Working Draft)阶段,欢迎您提交一般的建议,并鼓励您参与标准工作组。
- 在标准草案的最终征求意见稿 (Last Call Working Draft)阶段,工作组认为标准文本已经满足技术需求,并在其他相关标准工作组之间达成一致。
- 在征集参考实现(Call For Implementations)阶段,W3C认为标准文本已经接近稳定,希望产业界使用该标准开展参考实现,征集关于标准可实现性的经验和建议。
- 在提案推荐标准的征求意见(Call For Review of a Proposed Recommendation)阶段 ,W3C希望征求公众(特别是W3C会员)对标准文本一致性的最后意见。
3 WHATWG Web 超文本应用技术工作组
由于 W3C 开发更现代的 HTML 标准的速度缓慢,并且计划将 HTML 转换成一个名为 XHTML 的变体(具有类似 XML 的结构),浏览器厂商不赞同这种做法,所以,被称为 Web 超文本应用技术工作组(WHATWG)的组织于 2004 年成立。 [Source]
2019年,W3C 和 WHATWG 签署了一份谅解备忘录, W3C 成立新的 HTML 工作组,W3C 将继续发布 HTML 和 DOM 规范,WHATWG 定期提交一个稳定属性的审阅草案(review draft)给 W3C 作为 W3C HTML 和 DOM 规范的草稿,以保证 Web 标准的统一。
WHATWG 官网目前包含以下标准或者文档:
- HTML
- DOM
- URL
- Encoding
- Storage
- Streams
- Console
- Fetch
- XMLHttpRequest
- Notifications API
- Fullscreen API
- Infra
- MIME Sniffing
- Quirks Mode
4 Ecma International
Ecma International 协会制定了 ECMAScript(即 JavaScript 语言规范)和 JSON 格式的规范。
- ECMA-262 ECMAScript® Language Specification
- ECMA-402 ECMAScript® Internationalization API Specification
- ECMA-404 The JSON Data Interchange Syntax
- ECMA-414 ECMAScript® Specification Suite
关于 TC39 委员会的最新提案可以访问 https://tc39.es/ 或者 https://github.com/tc39 仓库。
除此以外,Ecma International 协会还参与制定 C# 和 Dart 语言的规范。
5 Khronos Group 科纳斯组织
虽然 SVG,Canvas 和 WebGL 经常被人们拿出来一起讨论,但 SVG 和 Canvas 包含在 HTML 规范中, 而 WebGL 则属于科纳斯组织(Khronos Group)制定发布的 WebGL 规范。
科纳斯组织(Khronos Group)制定了 WebGL、OpenGL ES 等规范。
其中,Typed Array Specification 类型数组规范已经成为 ECMAScript 2015 Specification 的一部分。
6 IEEE 电气和电子工程师协会
网上时常有人大呼小叫 JavaScript 中 0.1+0.2 !== 0.3
,实际上这样的现象并非 JavaScript 独有,其他遵循 IEEE 754 标准的语言也有这个问题,这里的 IEEE 754 标准正是由 IEEE 制定。
- IEEE 754 Standard for Floating-Point Arithmetic
- IEEE 854 Standard for Radix-Independent Floating-Point Arithmetic
- IEEE 802.11 WLAN
- IEEE 1003.1 Portable Operating System Interface (POSIX)
7 ANSI 美国国家标准学会
ASCII、C、SQL等标准最初都是由美国国家标准学会(ANSI)进行标准化,后来再提交给其他国际标准化组织。
- ANSI X3.4 7-Bit American National Standard Code For Information Interchange (7-Bit ASCII)
- ANSI X3.30 Representation of Date for Information Interchange
- ANSI X3.41 Code Extension Techniques for Use with 7 Bit Coded Character Set (ANSI control sequences)
- ANSI X3.64 Additional Controls For Use With American National Standard Code for Information Interchange (ANSI escape sequences)
- ANSI X3.135 Database Languages - SQL (ANSI SQL)
- ANSI X3.159 Programming languages - C (ANSI C)
8 ISO/IEC
- ISO/IEC 2022 Character code structure and extension techniques
- ISO/IEC 6429 Control functions for coded character sets
- ISO 8601 Date and time - Representations for information interchange
- ISO/IEC 8859 8-bit single-byte coded graphic character sets (Latin 1)
- ISO/IEC 9075 Database languages - SQL
- ISO/IEC 9899 Programming languages - C
- ISO/IEC 9945 Portable Operating System Interface (POSIX®)
- ISO/IEC 10646 Universal Multiple-Octet Coded Character Set (UCS)
- ISO/IEC 14882 Programming languages - C++
9 IETF 互联网工程任务组
万维网联盟(W3C)制定的是万维网(World Wide Web,WWW)标准,而互联网工程任务组(IETF)制定的则是互联网(Internet)标准。互联网所能提供的服务除了万维网以外,还包括电子邮件(E-mail)、文件传输(FTP)、远程登录(Telnet)、网络电话(VoIP)等。
IETF 的工作流程和 W3C 类似,见 RFC 2026 - The Internet Standards Process -- Revision 3,它的标准分为:
- Proposed Standard 提案标准
- Draft Standard 草案标准
- Internet Standard 互联网标准
常见 RFC 标准
- RFC 1738 - Uniform Resource Locators (URL)
- RFC 1808 - Relative Uniform Resource Locators
- RFC 4291 - IP Version 6 Addressing Architecture
- RFC 5952 - A Recommendation for IPv6 Address Text Representation
- RFC 2732 - Format for Literal IPv6 Addresses in URL's
- RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax
- RFC 6874 - Representing IPv6 Zone Identifiers in Address Literals and Uniform Resource Identifiers
- RFC 7320 - URI Design and Ownership
- RFC 3339 - Date and Time on the Internet: Timestamps
- RFC 791 - Internet Protocol
- RFC 792 - Internet Control Message Protocol
- RFC 793 - Transmission Control Protocol
- RFC 20 - ASCII format for Network Interchange
- RFC 2119 - Key words for use in RFCs to Indicate Requirement Levels
- RFC 6455 - The WebSocket Protocol
- RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
- RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
- RFC 5322 - Internet Message Format
- RFC 1034 - Domain Names - Concepts and Facilities
- RFC 1035 - Domain Names - Implementatio and Specification