HTTP|HTTP 协议简史

  • 短连接:(short-lived connections
    • 每一个 http 请求都有它独立完成, 这个就意味着每一个 http 请求之前都会有一个 tcp 连接和握手
    • 在 http 1.0 的时候, Connection设置为 close 才会使用这个模型
  • 持久连接(persistent - connections):
    • keep-alive 连接
  • http 2.0
    • 长连接数据帧数据流
http2 是基于的协议, 采用分帧是为了将重要的信息进行封装, 数据帧是 http 2.0 中最小的数据传输单位,
  • 这个是数据帧的数据结构:
HTTP|HTTP 协议简史
文章图片
image
【HTTP|HTTP 协议简史】http2 规范了对数据流的定义,HTTP/2 连接上独立的、双向的帧序列交换。你可以将流看作在连接上的一系列帧,它们构成了单独的 HTTP 请求和响应。
如果客户端想要发出请求,它会开启一个新的流。然后,服务器将在这个流上回复。这与 http 1 的请求 / 响应流程类似,
重要的区别在于,因为有分帧,所以多个请求和响应可以交错,而不会互相阻塞。流 ID(帧首部的第 6~9 字节) 用来标识帧所属的流。
  • 多路复用:
就是说在一个TCP连接上,我们可以向对方不断发送一个个的消息,这里每一个消息看成是一帧,而每一帧有个stream identifier 的字段标明这一帧属于哪个 流,然后在对方接收时,根据 stream identifier 拼接每个 流 的所有帧组成一整块数据。我们把 HTTP/1.x 每个请求都当作一个 流,那么请求化成多个流,请求响应数据切成多个帧,不同流中的帧交错地发送给对方,这就是HTTP/2中的 多路复用
HTTP|HTTP 协议简史
文章图片
image
  • 不同的流在交错发送;
  • HEADERS 帧在 DATA 帧前面;
  • 流的ID都是奇数,说明是由客户端发起的,这是标准规定的,那么服务端发起的就是偶数了。
HTTP/2 还是提供了 SETTINGS_MAX_CONCURRENT_STREAMS 字段在 SETTINGS 帧 上设置,可以限制并发流数目,标准上建议不要低于 100 以保证性能。
HTTP|HTTP 协议简史
文章图片
image
  • HTTP/1.x 一次请求-响应,建立一个连接,用完关闭;每一个小组任务都需要建立一个班级,多个小组任务多个班级,1:1比例
  • HTTP/1.1 Pipeling 解决方式为,若干个小组任务排队串行化单线程处理,后面小组任务等待前面小组任务完成才能获得执行机会,一旦有任务处理超时等,后续任务只能被阻塞,毫无办法,也就是人们常说的线头阻塞
  • HTTP/2 多个小组任务可同时并行(严格意义上是并发)在班级内执行。一旦某个小组任务耗时严重,但不会影响到其它小组任务正常执行
  • 针对一个班级资源维护要比多个班级资源维护经济多了,这也是多路复用出现的原因。
HTTP|HTTP 协议简史
文章图片
http2_stream_thumb.png

    推荐阅读