新睿云

> 知识库 > HTTP发展各版本特点,专治各种“疑难杂症”的面试官(下)

HTTP发展各版本特点,专治各种“疑难杂症”的面试官(下)

作者/来源:新睿云小编 发布时间:2020-02-28

一、谈谈你对多路复用的理解

多路复用是http/2的特性,http/2最大的特点是使用二进制帧数据进行传输。

多路复用同步阻塞IO 

多路复用同步阻塞IO

首先介绍http/2中几个重要的概念:

帧: http/2数据通信的最小单位。每个帧都包含帧首部,其中会标识当前帧所属的流。

消息: http/2中逻辑上的http消息。例如请求和响应等,消息由一个或多个帧组成。  、

流: 存在于连接中的虚拟通道。流可以承接双向消息,每个流都有一个唯一的整数id。

连接: http/1相同,都是指对应的TCP连接。

http/1的请求和响应报文,都是由起始行、首部和实体正文(可选)组成,各部分之间以文本换行符分隔。而http/2将请求和响应数据分隔成为更小的帧,并对他们采用二进制编码。

http/2 中,同域名下的所有请求都在一个连接上完成,这个连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,消息由一个或多个帧组成。多个帧之间可以乱序发送,然后根据帧首部的流标识可以重新组装。

二、http/2为什么要做头部压缩,实现原理是什么?

http请求都是由状态行、请求/响应头部、消息主体三部分组成,一般而言,消息主体都会经过gzip压缩,或者本身传输的就是压缩后的二进制文件(例如图片、音频),但是状态行和头部却没有经过任何压缩,直接以文本传输。对于一个请求而言,其headers所占的字节数也不少,尤其cookie,有些时候headers甚至超过了主体的大小。

头部压缩使用了HPACK算法。会在支持http/2的浏览器和服务端之间:

维护一份相同的静态字典,包含常见的头部名称以及特别常见的头部名称和值的组合。

http/2头部压缩 

http/2头部压缩

这样对完全匹配的头部键值对,例如:method:GET,就可以使用一个字符表示。对于头部名称可以匹配的,例如cookie: xxx,可以将名称使用一个字符表示。

维护一份相同的动态字典,可以动态的添加内容。

支持基于静态哈夫曼码表的哈夫曼编码(Huffman Coding)

三、http/2的Server Push有什么优点

支持服务器端推送,意味着服务端可以在发送页面HTML时主动推送其它资源,而不用等到浏览器解析到相应位置再发起请求。

另外,服务端可以主动推送,客户端也有权选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。

本文是相关系列文章,主要讲解TCP、HTTP、HTTPS

大厂面试指南——TCP协议相关篇

TCP握手为何三次而不是二次或者四次?

HTTP发展各版本特点,专治各种“疑难杂症”的面试官(上)

HTTP发展各版本特点,专治各种“疑难杂症”的面试官(下)

HTTPS相关,面试想要的都在这

热门标签
new year
在线咨询
咨询热线 400-1515-720
投诉与建议
{{item.description}}

—您的烦恼我们已经收到—

我们会将处理结果发送至您的手机

请耐心等待