http各个版本特性

172 阅读5分钟

http 0.9版本

简单,相当于一个“原型”

版本特点:

  1.  只读, 只允许用get请求 
  2.  响应请求,立即关闭链接 
  3.  功能简单,纯文本格式

http 1.0版本

增强了0.9版本,形式上与目前的http差别不大,但http1.0并不是一个“标准”,只是记录已有实践和模式的一份参考文档,不具有实际的约束力,相当于一个“备忘录”。

版本特点:

  1. 增加了 HEAD、POST 等新方法;
  2. 增加了响应状态码,标记可能的错误原因;
  3. 引入了协议版本号概念;
  4. 引入了 HTTP Header(头部)的概念,让 HTTP 处理请求和响应更加灵活;
  5. 传输的数据不再仅限于文本。

http 1.1版本

HTTP1.1 是对 HTTP1.0 的小幅度修正。但一个重要的区别是:它是一个“正式的标准”,而不是一份可有可无的“参考文档”。这意味着今后互联网上所有的浏览器、服务器、网关、代理等等,只要用到 HTTP 协议,就必须严格遵守这个标准,相当于是互联网世界的一个“立法”。

所以可以说真正投入使用的HTTP版本只有 1.1 和之后的版本,1.1之前的版本并没有正式的标准。

版本特点:

  1. 增加了 PUT、DELETE 等新的方法;
  2. 增加了缓存管理和控制;
  3. 明确了连接管理,允许持久连接;
  4. 允许响应数据分块(chunked),利于传输大文件;
  5. 强制要求 Host 头,让互联网主机托管成为可能。

http2 版本

在2010年时,Google 推出了新的SPDY协议,来提高HTTP协议传输效率,重点优化了HTTP1.X的请求延迟问题。SPDY 协议在 Chrome 浏览器上证明可行以后,就被当作 HTTP/2 的基础,于2015年发布http/2。HTTP/2 在高度兼容 HTTP/1.1 的同时在性能改善方面做了很大改善。

版本特点:

1. 头部压缩

2. 二进制协议

3. 多路复用

4. 服务端推送

5. 增强了安全性

http3版本

在HTTP/2里,可以看到它做出的许多努力,比如头部压缩、二进制分帧、虚拟的“流”与多路复用,性能方面比 HTTP/1 有了很大的提升,解决了“队头阻塞”这个问题。从协议栈来看,这些手段都是在应用层里,而在下层,也就是 TCP 协议里,还是会发生“队头阻塞”。

**TCP“丢包重传”机制:**丢失的包必须要等待重新传输确认,其他的包即使已经收到了,也只能放在缓冲区里,上层的应用拿不出来。比如:客户端用 TCP 发送了三个包,但服务器所在的操作系统只收到了后两个包,第一个包丢了。那么内核里的 TCP 协议栈就只能把已经收到的包暂存起来,“停下”等着客户端重传那个丢失的包,这样就又出现了“队头阻塞”。

由于这种“队头阻塞”是 TCP 协议固有的,http无法解决。但是TCP 存在的时间实在太长了,已经充斥在各种设备中,并且这个协议是由操作系统实现的,更新起来非常麻烦,成本太大难以普及。所以在HTTP3中,弃用了TCP协议,改为使用基于UDP协议的QUIC协议实现。

QUIC (Quick UDP Internet Connections)。它是 Google 提出来的一个基于 UDP 的传输协议。

QUIC特点:

  • 基于UDP,而UDP是无序的,因此不存在队头堵塞问题。

  • UDP本身无连接的,没有建立连接和断连的成本,天生比TCP快。

  • 直接应用了TLS1.3,获得了0-RTT、1-RTT 连接的好处。

  • QUIC有一套自己的丢包重传和拥塞控制的协议,本身就已经支持了加密、流和多路复用。

  • 支持“连接迁移”,使用不透明的“连接 ID”来标记通信的两个端点,客户端和服务器可以自行选择一组 ID 来标记自己,解除了 TCP 里连接对“IP 地址 + 端口”。

2022年6月,HTTP3被规范化,QUIC 本身做了很多优化特性,所以http3的工作减轻了很多,HTTP3实质上是HTTP2+QUIC。

版本特点:

  • 简化帧结构

  • 头部HPACK压缩算法升级成了 QPACK算法

HTTP3存在的问题

HTTP/3虽然彻底解决队头阻塞问题,弥补了HTTP2的其他不足。但是目前因为动到了底层协议,在在普及方面上可能会比 HTTP/2要慢的多的多。

HTTP进化历史总结:

从 HTTP 0.9 到 HTTP3,每个大版本的变化都是为了解决一个核心问题,为了适应时代的发展和市场的需求。而每一次的更改也都需要慎重,当不可逆的行为发生时,会形成沉重的历史包袱。

HTTP/1、HTTPS、HTTP/2和HTTP/3 的协议栈对比图

对比图可以看到协议栈越来越复杂。想起有一个名言:计算机领域没有什么问题是加一层解决不了的,如果有,就再加一层。从 HTTP 的演变过程中,我们可以看到中间又累加了若干层。 Web 才得以快速生动的展现给人们以丰富的内容。

参考资料:

《图解http》读书笔记

当我谈http时,我谈些什么