HTTP2小纪

多路复用

传统的HTTP1.1为了提高并发性,得通过提高连接数,即同时多发几个请求,但因为一个连接只能发一个请求,所以需要多建立几个TCP连接。建立TCP连接需要线程开销,而chrome同一个域最多只能建立6个连接,所以就有了雪碧图、合并代码文件等减少请求数的解决方案

但是在HTTP2中,对同一个域的服务器只建立一次TCP链接,同一个连接可以传输多个资源。多个数据流/信号通过一条信道进行传输


1528940904076.png
1528940997451.png
image

流量方面没有太大的改进,但是HTTP2的优势在于它的多路复用等方面

请求头压缩

通过规定头部字段的静态表格和实际传输过程中动态创建的表格,减少多个相似请求里面大量冗余的HTTP头部字段

image

客户端发了2次请求,第一次有完整的http报文头部,第二次请求的时候只有一个path的字段不一样,但是这次报文头它只需要发送一个path的字段就好了,这样就大大减少了发送的数据量。

这个的实现要求客户端和服务端同时维护一个报文头表

Server Push

解决传统HTTP传输中资源加载触发延迟的问题,浏览器在创建第一个流的时候,服务器就告诉浏览器哪些资源可以先加载了,浏览器提前进行加载而不用等到解析到的时候再加载

兼容

1528942563190.png

IE11 只在windows10支持

但如果浏览器不支持http2会怎么样呢? 其实也是能够正常打开的, 因为建立https连接的时候要先握手,浏览器或者客户端会发送一个Client Hello的包,这个包里面会说明它是否支持HTTP2,如下

image

nginx就能够根据握手信息决定是否使用http2,如果客户端不支持就使用http1.1

推荐阅读更多精彩内容