HTTPS相关,面试想要的都在这
服务端使用私钥解析随机数,并通过随机数构造对称加密算法,同样告知客户端之后的请求将使用随机数进行加密。
一、谈谈你对多路复用的理解
多路复用是http/2的特性,http/2最大的特点是使用二进制帧数据进行传输。
多路复用同步阻塞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头部压缩
这样对完全匹配的头部键值对,例如:method:GET,就可以使用一个字符表示。对于头部名称可以匹配的,例如cookie: xxx,可以将名称使用一个字符表示。
维护一份相同的动态字典,可以动态的添加内容。
支持基于静态哈夫曼码表的哈夫曼编码(Huffman Coding)
三、http/2的Server Push有什么优点
支持服务器端推送,意味着服务端可以在发送页面HTML时主动推送其它资源,而不用等到浏览器解析到相应位置再发起请求。
另外,服务端可以主动推送,客户端也有权选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。
本文是相关系列文章,主要讲解TCP、HTTP、HTTPS
《大厂面试指南——TCP协议相关篇》
《TCP握手为何三次而不是二次或者四次?》
《HTTP发展各版本特点,专治各种“疑难杂症”的面试官(上)》
《HTTP发展各版本特点,专治各种“疑难杂症”的面试官(下)》
《HTTPS相关,面试想要的都在这》