专栏名称: pfzzz
前端
目录
相关文章推荐
加措上师语录  ·  觉悟的勇气:卡波罗巴 ·  22 小时前  
杭州本地宝  ·  跨年夜杭州雷峰塔对外营业吗? ·  2 天前  
加措上师语录  ·  接受不完美 ·  2 天前  
杭州本地宝  ·  杭州地铁建设最新消息! ·  4 天前  
51好读  ›  专栏  ›  pfzzz

keep-alive与多路复用

pfzzz  · 掘金  ·  · 2021-03-28 17:51

正文

阅读 19

keep-alive与多路复用

HTTP 1.0

在HTTP1.0版本,存在一个问题:建立的一次连接,只有包含一个请求响应(也就是对应一个资源)。

如果有多个请求,那么效率就会很低。

http1.0.png

HTTP 1.1

在HTTP 1.1 中 connection: keep-alive 是默认开启的

改进一:连接复用

一次连接,可以有多个请求响应(对应多个资源)。

连接复用.png

改进二:管线化传输(pipeline)

下一次的请求不需要等待上一个响应来之后再发送。

但响应的顺序是不变的,FIFO(先进先出)

image.png

依旧存在的问题:

  • 请求是按次序的,后来者需要排队等待。
  • 请求头大多类似,重复传输浪费资源。
  • 同一域名的浏览器有最大并行请求限制。

HTTP 2.0

多路复用

由于 HTTP 1.X 是基于文本的,因为是文本,就导致了它必须是个整体,在传输是不可切割的,只能整体去传。

但 HTTP 2.0 是基于二进制流的。有两个非常重要的概念,分别是帧(frame)和流(stream)

  • 帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流。
  • 流就是多个帧组成的数据流。

将 HTTP 消息分解为独立的帧,交错发送,然后在另一端重新组装。

  • 并行交错地发送多个请求,请求之间互不影响。
  • 并行交错地发送多个响应,响应之间互不干扰。
  • 使用一个连接并行发送多个请求和响应。

简单的来说: 在同一个TCP连接中,同一时刻可以发送多个请求和响应,且不用按照顺序一一对应。

之前是同一个连接只能用一次, 如果开启了keep-alive,虽然可以用多次,但是同一时刻只能有一个HTTP请求。

多路复用.png

推荐文章
加措上师语录  ·  觉悟的勇气:卡波罗巴
22 小时前
杭州本地宝  ·  跨年夜杭州雷峰塔对外营业吗?
2 天前
加措上师语录  ·  接受不完美
2 天前
杭州本地宝  ·  杭州地铁建设最新消息!
4 天前
中国物理学会期刊网  ·  揭秘宇宙加速膨胀背后的暗能量
7 年前