本文介绍万维网通信协议 HTTP 的来源与发展,从发送请求、连接建立到数据传输,都经历了怎样的演变。
HTTP是什么?
1990年,为了方便科研人员跨文档跳转查阅论文,蒂姆发布了万维网的三大核心标准:
- HTML:HyperText Markup Language,超文本标记语言,用于编写带超链接的网页文档,定义页面结构。
- HTTP:HyperText Transfer Protocol,超文本传输协议,浏览器与服务器之间传输数据的通信规则。
- URL:Uniform Resource Locator,统一资源定位符,即我们常说的网址,用来定位互联网上任意资源的地址。
HTTP的发展
我们长期使用的是1997年HTTP/1.1的版本。
| 时间线 | 版本 | 请求能力 | 传输内容 | 连接机制 | 数据传输机制 |
|---|---|---|---|---|---|
| 1990年 | HTTP/0.9 | GET | 纯文字超文本 | TCP 短连接 | 纯文本串行传输 |
| 1996年 | HTTP/1.0 | POST、HEAD | 多媒体文件 | TCP 可复用 | 完整文件一次性传输 |
| 1997年 | HTTP/1.1 | Host、缓存优化 | 网页多媒体资源 | TCP 长连接 | 并行请求、 分块传输、断点续传 |
| 2015年 | HTTP/2 | 请求头压缩 | – | 全程单TCP长连接 | 二进制帧分片传输, 多路并行请求, 服务端主动推送资源 |
| 2022年 | HTTP/3 | – | 内置 TLS 加密 | 由TCP转向UDP | 独立流并行传输 |
三种请求方法
- GET:查询参数拼接在 URL 地址栏里,受 URL 长度限制,只能容纳少量文字。
- POST:数据放在请求体里,长度无上限,可传输大段文字、图片、附件。
- HEAD:客户端只发送请求头,服务器只返回响应头,用于快速检测链接状态、资源大小。
HTTP 协议共定义 9 种请求方法,以上三种是最常用的,另外还有PUT、DELETE、PATCH、OPTIONS、TRACE、CONNECT,用于资源管理、后台接口与网络调试。
请求能力的完善
HTTP/1.1 增加了 Host 请求头,写明网站域名,为单台服务器部署多个网站创造条件。此外,缓存校验响应头在原有 Last-Modified 的基础上增加了 Cache-Control 和 ETag,三者共同配合浏览器请求头完成缓存校验。
- Last-Modified:标记资源最后修改时间,依靠时间戳完成协商缓存校验。
- Cache-Control:定义资源本地缓存有效期,管控强缓存规则。
- ETag:为资源生成唯一内容哈希标识,精准判断文件内容是否改动。
HTTP/2 全程复用单条 TCP 长连接,没有必要重复发送完整的请求头、响应头,通过 HPACK 算法压缩后发送即可。
HPACK 算法的三大执行步骤:
- 协议内置全网统一的静态字典,存放常用的 HTTP 头部键值对,然后只传输对应的数字编号。
- 根据本次会话出现过的自定义头部,建立动态字典,同样只传对应的数字编号。
- 霍夫曼编码:对未匹配字典的剩余字符,做二进制压缩,进一步缩小体积。
传输内容的丰富
| 协议版本 | 支持的内容类型 |
|---|---|
| HTTP/0.9 | 纯文字 HTML 超文本 |
| HTTP/1.0 | 新增图片、音视频、各类附件,实现图文混合网页 |
| HTTP/1.1 | 可完整承载 HTML、CSS、JS、字体等整套网页混合资源,支持多资源独立加载 |
| HTTP/3 | 所有传输内容默认全程加密 |
连接机制
随着网页内容形式的丰富,网页通信效率也在不断提高。
- HTTP/0.9:每一次请求都要单独建立一次 TCP 连接,效率非常低。
- HTTP/1.0:允许单次 TCP 连接完成多次请求,但这是可选项,没有强制。
- HTTP/1.1:会建立多条独立 TCP 连接,且默认单次 TCP 连接完成多次请求,
- HTTP/2:全程只建立一次 TCP 连接,单连接即可承载多条独立数据流。
- HTTP/3:底层由 TCP 改为 UDP,只负责基础报文转发,TCP 的其它功能由 QUIC 协议实现。
在2026年,主流的连接机制为HTTP/2,但中国跟进较慢,还有30%的老旧网站在使用HTTP/1


数据来源:https://radar.cloudflare.com/zh-cn/adoption-and-usage/cn
数据传输机制
- HTTP/0.9:只能按顺序逐条传输文本数据。
- HTTP/1.0:服务端把整个文件全部读取完毕后,一次性完整发送给浏览器,遇到中断需要重传。
- HTTP/1.1:支持并行请求、分块传输、断点续传,提升大文件传输容错性。
- HTTP/2:二进制帧分片传输,多路并行请求,支持服务端主动推送资源。
- HTTP/3:一条 UDP 连接内,所有请求、响应、推送都各自占用一条独立流,可同时并行收发数据。