作者回复: 你可以这么理解: 1、规范中,允许1个stream上跑很多message。 2、当前浏览器的实现里,为了多路复用,每个request/response都使用了独立的stream,这是规范中的一种场景。 3、RFC中的这句话,是说已经关闭的Stream的id不能被复用,正在使用的stream上,可以发送多个message(其实关注的是Frame的双向传递)。 我的《Web协议详解与抓包实战》课第3部分有十多节课在讲HTTP2,比较详细,可以关注下
作者回复: 可以的。 第四部分需要对服务器开发方法有很深的理解,特别是对HTTP协议一定要有深入认识,比如HTTP协议为什么这么设计,REST架构的原则和约束。第五部分需要对Linux内核设计有一些认识。
作者回复: http2并不强制要求TLS协议,比如服务器之间用grpc传输消息时,走的就是没有TLS的HTTP2协议,也叫h2c
作者回复: 1、同步开发方式下,一个连接占用一个线程。 2、一个TCP连接包括四元组,两个IP,两个端口,比如服务器是固定的80或者443端口,而客户端会有一个随机端口,详见第5部分课程。 3、线程池满了后,连接也可以建立成功,因为连接建立是由内核完成的,但连接建立好后,没有线程会处理,最好请求会超时。
作者回复: http2有2大优势 :1、多路复用;2、hpack压缩; 这会带来巨大的性能提升,见《Web协议详解与抓包实战》第50课。
作者回复: 是的,全面超出。原因请见《Web协议详解与抓包实战》第3部分第49-65课。
作者回复: 1、TCP Segments失序是小概率事件,尤其是长时间失序,通常都是瓶颈路由器由于缓存队列满后主动丢包所致。因此,HTTP3才要在UDP上实现,解决你所说的网络拥塞时的队头阻塞问题。 2、在不发生长时间失序报文不到达的场景下,多路复用优势很明显,因为request/response这种模式很难把高带宽利用得好,而多路复用可以,在网络效率上也更高,包括 TCP拥塞控制避免(参见第5部分课程)和TCP握手流程避免。
作者回复: openresty还没有支持到http2的这个特性