keep-alive与多路复用

HTTP 1.0

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

若是有多个请求,那么效率就会很低。markdown

http1.0.png

HTTP 1.1

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

改进一:链接复用

一次链接,能够有多个请求响应(对应多个资源)。flex

链接复用.png

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

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

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

image.png

依旧存在的问题:3d

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

HTTP 2.0

多路复用

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

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

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

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

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

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

以前是同一个链接只能用一次, 若是开启了keep-alive,虽然能够用屡次,可是同一时刻只能有一个HTTP请求。

多路复用.png

相关文章
相关标签/搜索