http2.0

http2.0

Posted by Lan on June 17, 2019

http/2相对于http/1.x在底层传输上做了很大的改动和优化

http/2优势或新特性

  1. 采用二进制格式传输数据,而非http/1.x的文本格式。二进制格式在协议的解析和优化上更有优势

  2. 对消息头进行了HPACK压缩,能够节省消息头占用的网络流量。而http/1.x每次请求都会带有大量冗余的请求头,浪费了很多宽带资源。头压缩有利于节省宽带资源

  3. 多路复用,即用一个tcp实现多个请求。http/1.x多个请求之间的响应会被阻塞,而http/2.0真正做到了并发请求。

  4. 服务器端推送到客户端。如服务端会主动把js和css文件推送到客户端,而不需要客户端解析html再发送请求。

http/2新特性的原理

Frame-http/2的基石

Frame是http/2二进制的基础,基本上就可以将其理解为tcp里面的数据包。http/2的新特性正是由于底层数据结构的改变。

Frame基本格式都有长度,类型,标志和保留位

HPACK

HPACK的原理就是将常用的HTTP Header存放在表里,请求的时候,对于相同的Header只需要发送表里的索引位置即可。

如:method=GET使用索引值2表示,:path=/index.html用索引值5表示(完整的列表参考http://http2.github.io/http2-spec/compression.html#rfc.section.A)

多路复用-Multipexing

Frame Header中的Stream ID就是被用于实现这个特性的。每次请求/响应的不同SteamID就对相应的请求进行了标识,所有请求和响应都可以同时用一个TCP了

服务端主动推送-Server Push

当服务端要主动推送某个资源时,就会先发送一个TYPE为PUSH_PROMISE的Frame,里面带了PUSH新建的StreamID,就相当于告诉客户端,我将要用这个id来向你推送了,当客户端收到类型为PUSH_PROMISE的Frame后,就准备要接收来自服务端的流了

参考 https://www.cnblogs.com/heluan/p/8620312.html https://segmentfault.com/a/1190000002765886