jackieli123723 / jackieli123723.github.io

✅lilidong 个人博客
9 stars 0 forks source link

HTTP 版本:HTTP/1.x、HTTP/2、HTTP/3 #87

Open jackieli123723 opened 1 year ago

jackieli123723 commented 1 year ago

HTTP是支持万维网上客户端和服务器之间通信的协议。随着时间的推移,它有不同的版本,以提高数据传输的性能和安全性。HTTP 的主要版本是:

HTTP/1.x:HTTP 的第一个版本,于 1991 年推出,并于 1996 年和 1999 年进行了修订。 HTTP/2:HTTP 的第二个版本,于 2015 年标准化。 HTTP/3:HTTP 的第三个版本,仍在开发中。 HTTP 是 Web 开发和 Web 性能优化中的一个关键主题。了解 HTTP 版本之间的差异可以帮助您为您的应用程序和用户选择最佳选项。

HTTP/1.x HTTP/1.x 是用于在万维网上交换信息的 HTTP 协议的第一个版本。它于 1991 年推出,有两个主要修订版:HTTP/1.0 和 HTTP/1.1。HTTP/1.x 有一些限制,例如:

基于文本的框架:HTTP/1.x 使用纯文本来格式化消息,这会导致解析错误和开销。 无标头压缩:HTTP/1.x 不压缩 HTTP 标头字段,这会增加带宽使用和延迟。 没有多路复用:HTTP/1.x 只允许每个 TCP 连接一个请求和一个响应,这会导致队头阻塞和资源利用率低下。 无服务器推送:HTTP/1.x 不允许服务器在请求资源之前将资源发送给客户端,这会影响页面加载速度和用户体验。 无流优先级:HTTP/1.x 不允许客户端和服务器为不同的数据流分配优先级,这会影响资源交付和网络性能。 HTTP/1.x 兼容 HTTP 语义,例如方法、状态代码、URI 和标头字段。但是,它的效率和安全性都低于较新版本的 HTTP。如果没有 Connection 标头,或者如果其值设置为关闭,则 HTTP/1.0 是 HTTP 中使用的默认版本。HTTP/1.1 是 HTTP 中使用的默认版本,除非 Connection 标头另有指定。

HTTP/2 HTTP/2 是用于在万维网上交换信息的 HTTP 协议的第二个版本。它源自谷歌开发的实验性 SPDY 协议。HTTP/2 于 2015 年由互联网工程任务组 (IETF) 标准化。HTTP/2 在 HTTP/1.1 的基础上进行了多项改进,例如:

二进制框架:HTTP/2 使用二进制编码而不是纯文本来格式化消息,这减少了解析错误和开销。 标头压缩:HTTP/2 使用称为 HPACK 的新算法压缩 HTTP 标头字段,从而减少带宽使用和延迟。 多路复用:HTTP/2 允许通过单个 TCP 连接发送多个请求和响应,这消除了队头阻塞并提高了资源利用率。 服务器推送:HTTP/2 使服务器能够在请求资源之前将资源发送给客户端,这可以提高页面加载速度和用户体验。 流优先级:HTTP/2 允许客户端和服务器为不同的数据流分配优先级,这可以优化资源交付和网络性能。 HTTP/2 兼容 HTTP/1.1 语义,例如方法、状态代码、URI 和标头字段。但是,它改变了数据在客户端和服务器之间构建和传输的方式。大多数主流浏览器和服务器都支持 HTTP/2。

HTTP/3 HTTP/3 是用于在万维网上交换信息的超文本传输​​协议的第三个主要版本。它基于一种称为QUIC(快速 UDP 互联网连接)的新传输协议,该协议使用 UDP 而不是 TCP。HTTP/3 旨在通过引入以下功能来提高 Internet 数据传输的性能、可靠性和安全性:

更快的连接建立:QUIC 允许 TLS 版本协商与加密和传输握手同时发生。 零往返时间 (0-RTT):对于已经连接的服务器,客户端可以跳过握手要求并立即发送数据。 更全面的加密:QUIC默认提供加密,保护传输层免受各种攻击。 多路复用和流优先级:QUIC 支持单个连接中的多个数据流,并允许客户端和服务器为不同的流分配优先级。 拥塞控制和恢复:QUIC 适应不断变化的网络条件,并在不阻塞所有数据流的情况下从数据包丢失中恢复。 HTTP/3 仍在开发中,尚未得到浏览器或服务器的广泛支持。