-
短连接:(
short-lived connections)每一个
http请求都有它独立完成, 这个就意味着每一个http请求之前都会有一个tcp连接和握手在 http 1.0 的时候,
Connection设置为close才会使用这个模型
-
持久连接(
persistent - connections):-
keep-alive连接
-
-
http 2.0:-
长连接,数据帧,数据流,
-
http2是基于帧的协议, 采用分帧是为了将重要的信息进行封装, 数据帧是http 2.0中最小的数据传输单位,
- 这个是数据帧的数据结构:

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