http2协议之多路复用
http2多路复用解决的问题,由于浏览器的限制访问网站资源的时候浏览器在同一个域名下最多开启6个线程,这样如果前几个线程执行比较慢的任务或者需要等待服务器端响应,后面的资源就被阻塞住了 .以往的做法是把静态资源如图片 css等文件放在不同的域名下以提高页面加载速度.
另外一点就是明显减少了tcp连接的3次握手4次挥手,和ssl(tsl)协议中反复的client hello servier hello与证书传输的浪费.
插入待补充
这张图片就可以描述多路复用的情况,同一域名下所有访问都是从同一个tcp连接中走,ssl的数据包是并发的,原来http1.1的机制是client发出请求后必须等到服务器响应后才能发出第二个请求.现在所有请求都是同时发送的不需要等待.另外在http2包中还有服务器响应优先级的设置位.
http2采用二进制分帧,把header与data分成二进制帧
下面分析一下为什么HTTP2协议可以多路双向并发了.
通过wireshark抓包可以看到
1.发送的是headers包
2.发送的headers data包
length字段分配在前三个字节标示整个流的长度
type字段标示流的类型 分别为 HEADERS ,DATA ,MAGIC,SETTINGS 如果比较小的话headers与data可以放在一个包里.
magic 第一次传输之前client端都会发送magic让服务器端确认使用http2协议
3.Stream Identifier 4个字节 标志同步发送中的包属于哪一个请求 通过这个服务器判断是哪个请求的数据.