HTTP 的发展

徐小东

2023-01-03

HTTP(HyperText Transfer Protocol,超文本传输协议)是 WWW(万维网)的基础协议,最初由 Tim Berners-Lee 和他的团队在 1989-1991 年期间开发。HTTP 发生了太多的变化,在保持协议简单性的同时,不断扩展其灵活性。如今,HTTP 已经从一个只在实验室之间交换文件的早期协议进化到了现代复杂的互联网协议。

万维网的发明

1989 年,在 CERN 工作时,Tim Berners-Lee 编写了透过英特网构建超文本系统的提案。开始叫 Mesh,后来改为 World Wide Web。透过现有的 TCP 及 IP 协议构建,它由 4 个部分组成:

  1. 表示超文本文档的格式 HyperText Markup Language (HTML)
  2. 交换这些文档的协议 HyperText Transfer Protocol (HTTP)
  3. 呈现(及编辑)这些文档的客户端 WorldWideWeb(第一个网络浏览器)
  4. 给予访问文档的服务器 httpd

HTTP/0.9 - 单行协议

HTTP 的最初版本没有版本号,后来叫 0.9。HTTP/0.9 非常简单,请求只有一行:

GET /mypage.html

响应也很简单,只有文件本身:

<html>
  A very simple HTML page
</html>

HTTP/1.0 - 构建可扩展性

HTTP/0.9 很有限,但浏览器和服务器迅速使它功能更多:

此时,一个典型的请求和响应看起来像:

GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
  <IMG SRC="/myimage.gif">
</HTML>

由服务器和浏览器添加的功能及解决的问题最后形成了 RFC 1945 文档,并定义为 HTTP/1.0。

HTTP/1.1 - 标准化协议

在实现 HTTP/1.0 的同时,也在并行推进协议的标准化。HTTP 的第一个标准化版本 HTTP/1.1 于 1997 年初发布。HTTP/1.1 引入了许多改进:

一个典型的请求流:

GET /en-US/docs/Glossary/Simple_header HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header

200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 20 Jul 2016 10:55:30 GMT
Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a"
Keep-Alive: timeout=5, max=1000
Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT
Server: Apache
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding

(content)

HTTP/1.1 作为 RFC 2068 发布。

HTTP/2 - 更好的性能

在 HTTP/2 发布之前,HTTP/1.1 稳定运行了超过 15 年,并在下列方面进行了扩展:

网页变得越来越复杂,更多的数据传输意味着更多的 HTTP 请求。2010 年初,Google 实现了一个试验协议 SPDY。SPDY 增加了响应性,并解决了重复数据的传输问题,成为 HTTP/2 的基础。

HTTP/2 与 HTTP/1.1 的差异:

HTTP/2 在 2015 年正式标准化。截止 2022-01,全球大约 46.9% 的网站使用。

HTTP/3 - 透过 QUIC 的 HTTP

HTTP/3 使用 QUIC 协议代替 TCP 协议。截止 2022-10,全球大约 26% 的网站使用。

HTTP/3 于 2022 年在 RFC 9114 中定义。

参考