HTTP/1.1、HTTP/2、HTTP/3 基本概述

参考链接
https://xiaolincoding.com/network/2_http/http_interview.html#http-1-1-相比-http-1-0-提高了什么性能

HTTP/1.1

HTTP/1.1 相比 HTTP/1.0 性能上的改进:

  • 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
  • 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

但 HTTP/1.1 还是有性能瓶颈:

  1. 请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分;
  2. 发送冗长的首部。每次互相发送相同的首部造成的浪费较多;
  3. 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞;(管道对客户端来说可以发送多次请求)
  4. 没有请求优先级控制;
  5. 请求只能从客户端开始,服务器只能被动响应。

HTTP/2

HTTP/2 相比 HTTP/1.1 性能上的改进:

  1. 头部压缩
  2. 二进制格式
  3. 并发传输(多个 Stream 复用在一条 TCP 连接,解决队头阻塞问题)
  4. 服务器主动推送资源
    (客户端和服务器双方都可以建立 Stream, Stream ID 也是有区别的,客户端建立的 Stream 必须是奇数号,而服务器建立的 Stream 必须是偶数号。)
    比如,客户端在访问 HTML 时,服务器可以直接主动推送 CSS 文件,减少了消息传递的次数。
    > 详细解释

https://xiaolincoding.com/network/2_http/http_interview.html#http-2-做了什么优化

HTTP/2 有什么不足?

  • HTTP/2 通过 Stream 的并发能力,解决了 HTTP/1 队头阻塞的问题,但是 HTTP/2 还是存在"队头阻塞"的问题,只不过问题不是在 HTTP 这一层面,而是在 TCP 这一层。
    HTTP/2 是基于 TCP 协议来传输数据的,TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区里的数据返回给 HTTP 应用,那么当「前 1 个字节数据」没有到达时,后收到的字节数据只能存放在内核缓冲区里,只有等到这 1 个字节数据到达时,HTTP/2 应用层才能从内核中拿到数据,这就是 HTTP/2 队头阻塞问题。

HTTP/3

HTTP/1.1 和 HTTP/2 都有队头阻塞的问题:

  • HTTP/1.1 中的管道( pipeline)虽然解决了请求的队头阻塞,但是没有解决响应的队头阻塞,因为服务端需要按顺序响应收到的请求,如果服务端处理某个请求消耗的时间比较长,那么只能等响应完这个请求后, 才能处理下一个请求,这属于 HTTP 层队头阻塞。
  • HTTP/2 虽然通过多个请求复用一个 TCP 连接解决了 HTTP 的队头阻塞 ,但是一旦发生丢包,就会阻塞住所有的 HTTP 请求,这属于 TCP 层队头阻塞。
    HTTP/2 队头阻塞的问题是因为 TCP,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!

详细解释
https://xiaolincoding.com/network/2_http/http_interview.html#http-3-做了哪些优化

UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。

QUIC 有以下 3 个特点。

  1. 无队头阻塞

    QUIC 连接上的多个 Stream 之间并没有依赖,都是独立的,某个流发生丢包了,只会影响该流,其他流不受影响。

  2. 更快的连接建立

    对于 HTTP/1 和 HTTP/2 协议,TCP 和 TLS 是分层的,分别属于内核实现的传输层、openssl 库实现的表示层,因此它们难以合并在一起,需要分批次来握手,先 TCP 握手,再 TLS 握手

    HTTP/3 在传输数据前虽然需要 QUIC 协议握手,但是这个握手过程只需要 1 RTT,握手的目的是为确认双方的「连接 ID」和TLS密钥等,连接迁移就是基于连接 ID 实现的。(也可以说,其实这1RTT更多就是属于TLS1.3的握手连接)

  1. 连接迁移
相关推荐
计算机小手6 分钟前
内网穿透系列九:开源的网络穿透与组网工具 EasyTier,支持多种数据传输通道,去中心化,兼具高效与安全
网络·经验分享·开源软件
YC运维41 分钟前
网络配置综合实验全攻略(对之前学习的总结)
linux·服务器·网络
yqcoder1 小时前
13. https 是绝对安全的吗
网络协议·安全·https
Xi-Xu2 小时前
隆重介绍 Xget for Chrome:您的终极下载加速器
前端·网络·chrome·经验分享·github
孙克旭_3 小时前
day051-ansible循环、判断与jinja2模板
linux·运维·服务器·网络·ansible
悟空胆好小4 小时前
分音塔科技(BABEL Technology) 的公司背景、股权构成、产品类型及技术能力的全方位解读
网络·人工智能·科技·嵌入式硬件
DoraBigHead4 小时前
《电磁波的浪漫,铜线上的灵魂》——计算机网络·物理层全解版
网络协议
ssswywywht5 小时前
OSPF实验
网络
FCM665 小时前
HCIA第一次实验报告:静态路由综合实验
网络·tcp/ip·信息与通信
apihz5 小时前
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
android·服务器·开发语言·网络·数据库·网络协议·tcp/ip