一、引言HTTP是什么HTTPHypertext Transfer Protocol超文本传输协议是互联网上应用最为广泛的协议之一负责客户端与服务器之间的数据通信。1989年英国工程师蒂姆·伯纳斯-李在CERN工作期间撰写了一份关于在互联网上构建超文本系统的提案。最初称为Mesh在1990年实现时被重新命名为World Wide Web万维网。HTTP作为万维网的四大核心构建模块之一与HTML、浏览器和服务器一起奠定了现代互联网的基础。1991年8月6日蒂姆·伯纳斯-李在公共新闻组发表了一篇帖子这被认为是万维网作为公共项目的正式开始。从那时起HTTP经历了三十多年的演进形成了从0.9到3.0的多个版本。二、HTTP/0.91991年单行协议2.1 背景HTTP的初始版本没有版本号后来被称为HTTP/0.9以区别于后续版本。这是HTTP的“鼻祖”版本奠定了协议的核心内容客户端-服务端交互的架构、域名:端口确定目标地址、回车换行作为基本分隔符等。2.2 协议特征HTTP/0.9极其简单被称为“单行协议”。请求格式只由一行组成以唯一的GET方法开头后跟资源的路径。完整URL没有包含在内因为一旦连接到服务器协议、服务器和端口就不再需要。textGET /my-page.html响应格式只包含文件本身没有任何头信息。texthtml A simple web page /html2.3 局限性限制说明仅支持GET方法只能获取资源无法提交数据无HTTP头无法传输元数据只能传输HTML不能传输图片、样式等其他格式无状态码服务器出错时返回一个包含错误描述的HTML页面短连接每个请求独立建立TCP连接处理完成后立即断开2.4 历史地位HTTP/0.9的功能相当于后续版本的一个小子集但它在当时足以满足需求——1991年的互联网还只是学术机构之间交换文本文件的网络。三、HTTP/1.01996年构建可扩展性3.1 背景HTTP/0.9的功能极其有限。随着互联网的发展浏览器和服务器需要更通用的协议。1996年11月RFC 1945发布正式定义了HTTP/1.0。3.2 核心改进改进项说明版本号请求中明确标注HTTP版本状态码响应中带有状态码便于客户端判断结果HTTP头请求和响应均支持头部实现元数据传输Content-Type支持传输多种数据格式图片、视频、二进制等新增方法增加了POST和HEAD方法典型请求textGET /my-page.html HTTP/1.0 User-Agent: NCSA_Mosaic/2.0典型响应textHTTP/1.0 200 OK Date: Tue, 15 Nov 1994 08:12:31 GMT Server: CERN/3.0 Content-Type: text/html HTML.../HTML3.3 局限性HTTP/1.0最大的问题是无法复用连接。每次请求都需要新建TCP连接经历三次握手处理完成后立即断开。这导致两个问题效率低下每个HTTP请求都要重新经历TCP握手队头阻塞下一个请求必须等前一个请求响应到达之后才能发送后面的请求被阻塞此外HTTP/1.0无状态不跟踪客户端也不记录过去的请求。四、HTTP/1.11997年标准化协议4.1 背景HTTP的第一个标准化版本HTTP/1.1于1997年初发布RFC 2068仅在HTTP/1.0之后几个月。此后经过多次修订1999年RFC 26162014年RFC 7230-72352022年RFC 9110-9112。4.2 核心改进改进项说明持久连接默认开启Connection: keep-alive复用TCP连接管道化允许在收到前一个响应之前发送后续请求Host头支持同一IP地址托管多个域名虚拟主机分块传输支持Transfer-Encoding: chunked动态内容传输Range支持断点续传只请求资源的一部分新增方法PUT、PATCH、DELETE、OPTIONS、CONNECT、TRACE缓存控制更复杂的缓存策略ETag、If-Modified-Since等内容协商语言、编码、类型的协商机制典型请求持久连接textGET /en-US/docs/ HTTP/1.1 Host: developer.mozilla.org User-Agent: Mozilla/5.0 Accept: text/html,application/xhtmlxml Accept-Encoding: gzip, deflate, br Connection: keep-alive4.3 持久连接的价值建立TCP连接是客户端-服务器交换中成本高昂的部分而TCP慢启动意味着寿命更长的连接比新创建的连接更快。HTTP/1.1允许为多个请求和响应重用一个TCP连接避免了每次请求都重新建立连接的开销。4.4 仍未解决的问题队头阻塞尽管HTTP/1.1引入了持久连接和管道化但队头阻塞问题仍然存在。原因客户端仍然必须等待每个资源下载完毕才能请求下一个资源请求是串行执行的。缓解手段大多数浏览器允许每个网站最多建立6个并行TCP连接利用6个并行连接同时获取多个资源在一定程度上缓解了性能问题。五、HTTP/2.02015年性能革命5.1 背景从1997年到2015年HTTP/1.1稳定运行了18年。但随着网页复杂度急剧增加JavaScript、CSS、图片等资源数量暴增HTTP/1.1的性能瓶颈日益突出。2015年HTTP/2.0正式发布RFC 7540。这不是对1.x的简单优化而是一次全面的革新。5.2 核心改进改进项说明二进制分帧将文本协议改为二进制帧解析更高效多路复用一个TCP连接上并发多个请求/响应头部压缩HPACK压缩头部减少传输开销服务器推送服务器可主动推送资源给客户端请求优先级可为请求设置优先级5.3 二进制分帧HTTP/1.x是文本协议解析需要考虑多种格式兼容性负担重。HTTP/2.0在应用层和传输层之间增加了一个二进制分帧层将所有传输的信息分割为更小的消息和帧采用二进制格式编码。帧结构一帧中包含数据和流标识符通过流标识符可以区分不同请求实现多路复用。text┌─────────────────────────────────────────────┐ │ 应用层HTTP请求/响应 │ ├─────────────────────────────────────────────┤ │ 二进制分帧层新增 │ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │HEADERS│ │ DATA │ │HEADERS│ │ DATA │ │ │ │ stream1│ │stream1│ │stream2│ │stream2│ │ │ └──────┘ └──────┘ └──────┘ └──────┘ │ ├─────────────────────────────────────────────┤ │ 传输层TCP │ └─────────────────────────────────────────────┘5.4 多路复用在HTTP/1.1中多个请求在同一个TCP连接上排队串行处理后面的请求必须等待前面的请求完成。在HTTP/2.0中多个请求可在同一个TCP连接上并发执行。每个请求对应一个Stream ID接收方根据ID重组数据。关键区别HTTP/1.1管道化多个请求排队串行处理某个请求耗时严重会导致后续请求被阻塞HTTP/2.0多路复用多个请求可同时并行执行某个请求耗时不会影响其它请求5.5 头部压缩HTTP/1.x的头部是纯文本每次请求都要重复发送大量相同头部字段如Cookie平均500-800字节。HTTP/2.0使用HPACK算法压缩头部静态表62个常用头部预定义动态表双方各自缓存一份头部字段表霍夫曼编码进一步压缩压缩率可达50%-70%大大减少了传输开销。5.6 服务器推送与1.x版本一问一答的模式不同HTTP/2.0允许服务器主动向客户端推送资源。例如客户端请求HTML页面服务器在响应HTML的同时可以主动推送页面引用的CSS和JS文件减少额外的请求延迟。5.7 HTTP/2.0的遗留问题TCP队头阻塞尽管HTTP/2.0解决了应用层的队头阻塞但传输层TCP的队头阻塞仍然存在。由于TCP协议要求按顺序发送和接收数据受拥塞控制影响少量丢包会导致整个TCP连接上的所有流被阻塞。在移动网络环境下这个问题尤其明显。六、HTTP/3.02022年QUIC时代6.1 背景HTTP/2.0虽然大幅提升了性能但其底层仍然依赖TCP。TCP协议中的队头阻塞、握手延迟等问题无法通过修改应用层来解决。随着移动互联网的普及超过一半的互联网流量通过无线传输TCP在有线网络时代的设计思路面临挑战。2018年HTTP/3.0的第一个草案发布2022年6月6日正式成为RFC 9114标准。6.2 最核心的变化弃用TCP改用QUICHTTP/3.0与之前版本的最大区别是不再使用TCP协议而是基于UDP的QUIC协议。textHTTP/1.x/2.0 应用层HTTP→ 传输层TCP→ 网络层IP HTTP/3.0 应用层HTTP→ 传输层QUIC over UDP→ 网络层IP6.3 QUIC协议的核心优势特性说明多路复用每个流独立传输丢包只影响单个流更快的连接建立0-RTT建连首次1-RTT内置加密集成TLS 1.3加密成为默认连接迁移使用Connection ID而非四元组改进的拥塞控制在用户态实现更灵活6.4 传输层多路复用QUIC使用UDP在两个端点之间建立多个独立的流。一个流的数据包丢失不会影响其他流彻底解决了TCP层的队头阻塞问题。测试数据显示在30%丢包率网络下HTTP/3.0的视频加载速度比HTTP/2.0快2.3倍。6.5 连接迁移TCP连接由四元组源IP、源端口、目的IP、目的端口唯一确定。当移动设备从WiFi切换到4G时IP地址变化TCP连接必须重新建立。HTTP/3.0使用Connection ID一个64位随机数来标识连接。即使IP地址改变只要Connection ID不变连接仍然有效。6.6 更快连接建立协议建连所需说明HTTP/1.1 TLS2-3 RTTTCP握手 TLS握手HTTP/2.0 TLS2-3 RTTTCP握手 TLS握手HTTP/3.0首次1 RTTQUIC内建加密HTTP/3.0再次0 RTT会话恢复在跨大洲网络环境中TCP连接建立需120-180ms而HTTP/3.0将连接建立时间大幅缩短。6.7 当前部署现状HTTP/3.0目前已在主流浏览器中获得支持客户端HTTP/3.0支持情况Chrome 109✅ 支持Firefox 113✅ 支持Safari 16.4✅ 支持Nginx 1.25.0✅ 支持局限目前很多网络设备对UDP数据包策略不够友好可能进行拦截或QoS限速导致HTTP/3.0的连接成功率下降。此外QUIC的正确配置也较为复杂。七、版本演进总结版本年份核心特性最大进步HTTP/0.91991GET方法、HTML传输确立基础交互模式HTTP/1.01996头部、状态码、POST可扩展性支持多种数据类型HTTP/1.11997持久连接、Host头、管道化连接复用提升传输效率HTTP/2.02015二进制分帧、多路复用、HPACK并发传输解决应用层队头阻塞HTTP/3.02022QUIC协议、0-RTT、连接迁移彻底解决传输层队头阻塞从0.9到3.0HTTP的演进路径清晰可见从只能传输纯文本到支持多媒体从串行到并行从TCP到QUIC每一次迭代都在解决当前网络环境下的性能瓶颈。八、写在最后HTTP协议的演进是互联网技术发展的缩影。三十多年来它从一个只在学术机构间传递文本文件的简单协议成长为支撑全球数十亿用户日常网络活动的核心基础设施。HTTP/1.0让互联网具备了可扩展性奠定了基础HTTP/1.1用长连接让网页加载变快HTTP/2.0用多路复用彻底改变了并发能力HTTP/3.0用QUIC带来了更好的弱网表现理解HTTP的演进历史不仅有助于理解网络通信的底层机制也为技术选型和性能优化提供了重要参考。
详细解析HTTP协议完整进化史——从/1.0到/3.0
发布时间:2026/6/17 20:29:08
一、引言HTTP是什么HTTPHypertext Transfer Protocol超文本传输协议是互联网上应用最为广泛的协议之一负责客户端与服务器之间的数据通信。1989年英国工程师蒂姆·伯纳斯-李在CERN工作期间撰写了一份关于在互联网上构建超文本系统的提案。最初称为Mesh在1990年实现时被重新命名为World Wide Web万维网。HTTP作为万维网的四大核心构建模块之一与HTML、浏览器和服务器一起奠定了现代互联网的基础。1991年8月6日蒂姆·伯纳斯-李在公共新闻组发表了一篇帖子这被认为是万维网作为公共项目的正式开始。从那时起HTTP经历了三十多年的演进形成了从0.9到3.0的多个版本。二、HTTP/0.91991年单行协议2.1 背景HTTP的初始版本没有版本号后来被称为HTTP/0.9以区别于后续版本。这是HTTP的“鼻祖”版本奠定了协议的核心内容客户端-服务端交互的架构、域名:端口确定目标地址、回车换行作为基本分隔符等。2.2 协议特征HTTP/0.9极其简单被称为“单行协议”。请求格式只由一行组成以唯一的GET方法开头后跟资源的路径。完整URL没有包含在内因为一旦连接到服务器协议、服务器和端口就不再需要。textGET /my-page.html响应格式只包含文件本身没有任何头信息。texthtml A simple web page /html2.3 局限性限制说明仅支持GET方法只能获取资源无法提交数据无HTTP头无法传输元数据只能传输HTML不能传输图片、样式等其他格式无状态码服务器出错时返回一个包含错误描述的HTML页面短连接每个请求独立建立TCP连接处理完成后立即断开2.4 历史地位HTTP/0.9的功能相当于后续版本的一个小子集但它在当时足以满足需求——1991年的互联网还只是学术机构之间交换文本文件的网络。三、HTTP/1.01996年构建可扩展性3.1 背景HTTP/0.9的功能极其有限。随着互联网的发展浏览器和服务器需要更通用的协议。1996年11月RFC 1945发布正式定义了HTTP/1.0。3.2 核心改进改进项说明版本号请求中明确标注HTTP版本状态码响应中带有状态码便于客户端判断结果HTTP头请求和响应均支持头部实现元数据传输Content-Type支持传输多种数据格式图片、视频、二进制等新增方法增加了POST和HEAD方法典型请求textGET /my-page.html HTTP/1.0 User-Agent: NCSA_Mosaic/2.0典型响应textHTTP/1.0 200 OK Date: Tue, 15 Nov 1994 08:12:31 GMT Server: CERN/3.0 Content-Type: text/html HTML.../HTML3.3 局限性HTTP/1.0最大的问题是无法复用连接。每次请求都需要新建TCP连接经历三次握手处理完成后立即断开。这导致两个问题效率低下每个HTTP请求都要重新经历TCP握手队头阻塞下一个请求必须等前一个请求响应到达之后才能发送后面的请求被阻塞此外HTTP/1.0无状态不跟踪客户端也不记录过去的请求。四、HTTP/1.11997年标准化协议4.1 背景HTTP的第一个标准化版本HTTP/1.1于1997年初发布RFC 2068仅在HTTP/1.0之后几个月。此后经过多次修订1999年RFC 26162014年RFC 7230-72352022年RFC 9110-9112。4.2 核心改进改进项说明持久连接默认开启Connection: keep-alive复用TCP连接管道化允许在收到前一个响应之前发送后续请求Host头支持同一IP地址托管多个域名虚拟主机分块传输支持Transfer-Encoding: chunked动态内容传输Range支持断点续传只请求资源的一部分新增方法PUT、PATCH、DELETE、OPTIONS、CONNECT、TRACE缓存控制更复杂的缓存策略ETag、If-Modified-Since等内容协商语言、编码、类型的协商机制典型请求持久连接textGET /en-US/docs/ HTTP/1.1 Host: developer.mozilla.org User-Agent: Mozilla/5.0 Accept: text/html,application/xhtmlxml Accept-Encoding: gzip, deflate, br Connection: keep-alive4.3 持久连接的价值建立TCP连接是客户端-服务器交换中成本高昂的部分而TCP慢启动意味着寿命更长的连接比新创建的连接更快。HTTP/1.1允许为多个请求和响应重用一个TCP连接避免了每次请求都重新建立连接的开销。4.4 仍未解决的问题队头阻塞尽管HTTP/1.1引入了持久连接和管道化但队头阻塞问题仍然存在。原因客户端仍然必须等待每个资源下载完毕才能请求下一个资源请求是串行执行的。缓解手段大多数浏览器允许每个网站最多建立6个并行TCP连接利用6个并行连接同时获取多个资源在一定程度上缓解了性能问题。五、HTTP/2.02015年性能革命5.1 背景从1997年到2015年HTTP/1.1稳定运行了18年。但随着网页复杂度急剧增加JavaScript、CSS、图片等资源数量暴增HTTP/1.1的性能瓶颈日益突出。2015年HTTP/2.0正式发布RFC 7540。这不是对1.x的简单优化而是一次全面的革新。5.2 核心改进改进项说明二进制分帧将文本协议改为二进制帧解析更高效多路复用一个TCP连接上并发多个请求/响应头部压缩HPACK压缩头部减少传输开销服务器推送服务器可主动推送资源给客户端请求优先级可为请求设置优先级5.3 二进制分帧HTTP/1.x是文本协议解析需要考虑多种格式兼容性负担重。HTTP/2.0在应用层和传输层之间增加了一个二进制分帧层将所有传输的信息分割为更小的消息和帧采用二进制格式编码。帧结构一帧中包含数据和流标识符通过流标识符可以区分不同请求实现多路复用。text┌─────────────────────────────────────────────┐ │ 应用层HTTP请求/响应 │ ├─────────────────────────────────────────────┤ │ 二进制分帧层新增 │ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │HEADERS│ │ DATA │ │HEADERS│ │ DATA │ │ │ │ stream1│ │stream1│ │stream2│ │stream2│ │ │ └──────┘ └──────┘ └──────┘ └──────┘ │ ├─────────────────────────────────────────────┤ │ 传输层TCP │ └─────────────────────────────────────────────┘5.4 多路复用在HTTP/1.1中多个请求在同一个TCP连接上排队串行处理后面的请求必须等待前面的请求完成。在HTTP/2.0中多个请求可在同一个TCP连接上并发执行。每个请求对应一个Stream ID接收方根据ID重组数据。关键区别HTTP/1.1管道化多个请求排队串行处理某个请求耗时严重会导致后续请求被阻塞HTTP/2.0多路复用多个请求可同时并行执行某个请求耗时不会影响其它请求5.5 头部压缩HTTP/1.x的头部是纯文本每次请求都要重复发送大量相同头部字段如Cookie平均500-800字节。HTTP/2.0使用HPACK算法压缩头部静态表62个常用头部预定义动态表双方各自缓存一份头部字段表霍夫曼编码进一步压缩压缩率可达50%-70%大大减少了传输开销。5.6 服务器推送与1.x版本一问一答的模式不同HTTP/2.0允许服务器主动向客户端推送资源。例如客户端请求HTML页面服务器在响应HTML的同时可以主动推送页面引用的CSS和JS文件减少额外的请求延迟。5.7 HTTP/2.0的遗留问题TCP队头阻塞尽管HTTP/2.0解决了应用层的队头阻塞但传输层TCP的队头阻塞仍然存在。由于TCP协议要求按顺序发送和接收数据受拥塞控制影响少量丢包会导致整个TCP连接上的所有流被阻塞。在移动网络环境下这个问题尤其明显。六、HTTP/3.02022年QUIC时代6.1 背景HTTP/2.0虽然大幅提升了性能但其底层仍然依赖TCP。TCP协议中的队头阻塞、握手延迟等问题无法通过修改应用层来解决。随着移动互联网的普及超过一半的互联网流量通过无线传输TCP在有线网络时代的设计思路面临挑战。2018年HTTP/3.0的第一个草案发布2022年6月6日正式成为RFC 9114标准。6.2 最核心的变化弃用TCP改用QUICHTTP/3.0与之前版本的最大区别是不再使用TCP协议而是基于UDP的QUIC协议。textHTTP/1.x/2.0 应用层HTTP→ 传输层TCP→ 网络层IP HTTP/3.0 应用层HTTP→ 传输层QUIC over UDP→ 网络层IP6.3 QUIC协议的核心优势特性说明多路复用每个流独立传输丢包只影响单个流更快的连接建立0-RTT建连首次1-RTT内置加密集成TLS 1.3加密成为默认连接迁移使用Connection ID而非四元组改进的拥塞控制在用户态实现更灵活6.4 传输层多路复用QUIC使用UDP在两个端点之间建立多个独立的流。一个流的数据包丢失不会影响其他流彻底解决了TCP层的队头阻塞问题。测试数据显示在30%丢包率网络下HTTP/3.0的视频加载速度比HTTP/2.0快2.3倍。6.5 连接迁移TCP连接由四元组源IP、源端口、目的IP、目的端口唯一确定。当移动设备从WiFi切换到4G时IP地址变化TCP连接必须重新建立。HTTP/3.0使用Connection ID一个64位随机数来标识连接。即使IP地址改变只要Connection ID不变连接仍然有效。6.6 更快连接建立协议建连所需说明HTTP/1.1 TLS2-3 RTTTCP握手 TLS握手HTTP/2.0 TLS2-3 RTTTCP握手 TLS握手HTTP/3.0首次1 RTTQUIC内建加密HTTP/3.0再次0 RTT会话恢复在跨大洲网络环境中TCP连接建立需120-180ms而HTTP/3.0将连接建立时间大幅缩短。6.7 当前部署现状HTTP/3.0目前已在主流浏览器中获得支持客户端HTTP/3.0支持情况Chrome 109✅ 支持Firefox 113✅ 支持Safari 16.4✅ 支持Nginx 1.25.0✅ 支持局限目前很多网络设备对UDP数据包策略不够友好可能进行拦截或QoS限速导致HTTP/3.0的连接成功率下降。此外QUIC的正确配置也较为复杂。七、版本演进总结版本年份核心特性最大进步HTTP/0.91991GET方法、HTML传输确立基础交互模式HTTP/1.01996头部、状态码、POST可扩展性支持多种数据类型HTTP/1.11997持久连接、Host头、管道化连接复用提升传输效率HTTP/2.02015二进制分帧、多路复用、HPACK并发传输解决应用层队头阻塞HTTP/3.02022QUIC协议、0-RTT、连接迁移彻底解决传输层队头阻塞从0.9到3.0HTTP的演进路径清晰可见从只能传输纯文本到支持多媒体从串行到并行从TCP到QUIC每一次迭代都在解决当前网络环境下的性能瓶颈。八、写在最后HTTP协议的演进是互联网技术发展的缩影。三十多年来它从一个只在学术机构间传递文本文件的简单协议成长为支撑全球数十亿用户日常网络活动的核心基础设施。HTTP/1.0让互联网具备了可扩展性奠定了基础HTTP/1.1用长连接让网页加载变快HTTP/2.0用多路复用彻底改变了并发能力HTTP/3.0用QUIC带来了更好的弱网表现理解HTTP的演进历史不仅有助于理解网络通信的底层机制也为技术选型和性能优化提供了重要参考。