面试官:Http协议了解吗,知道Http1.0和Http1.1以及Http2.0有什么区别吗,可以简单聊一聊吗?
派大星:当然可以,
- Http1.0是要指定keep-alive来开启持久化连接,
默认底层的tcp是短链接
。简单来说就是浏览器每次请求都要重新建立一次tcp连接,完事之后再释放tcp连接(tcp四次挥手,连接断开)。 - Http1.1
默认底层的tcp是长连接
,简单来说就是第一次请求网站打开网页后会打开一个tcp连接,接着就在一段时间内不会关闭。后续这个网页中的css,js图片等请求全部走同一个tcp链接,频繁的发送请求获取相应直到请求结束才会释放tcp链接,大幅度的提升了复杂网页的打开速度,并提高了性能。 - Http2.0 的特点是
支持多路复用
。基于一个tcp链接并行发送多个请求以及接收响应,解决了http1.1对同一时间同一个域名的请求有限制的问题。二进制分帧,将传输数据拆分为更小的帧(数据包
),提高了性能,实现低延迟高吞吐
面试官:不错,那你知道Http和Https吗?能简单聊一聊它们之间有什么区别吗?
派大星:好的,首先Http是明文不加密的。而Https开始是基于SSL协议
对http进行了加密,后来又升级到了TSL协议来加密。现在有称之为SSL/TSL
面试官:可以简单聊聊Https的实现原理吗?
派大星:可以,
- 首先浏览器把自己支持的加密规则发送个网站
- 网站从这套加密规则中选择其中一套加密算法和hash算法,然后把自己的身份信息用证书的方式返回给浏览器。证书里包含网站地址、加密公钥、证书颁发机构(类似一次握手)
- 接着浏览器验证证书的合法性,通过后浏览器地址栏上会出现一把小锁;浏览器接着生成一串随机数密码,然后用证书的公钥进行加密,
注意这里走的是非对称加密
;用约定好的hash算法生成握手消息的hash值,然后用密码对消息进行加密,最后把所有东西发送给网站。这块走的是对称加密
。 - 网站接收到数据后,使用本地的私钥对消息中密码解密出来,然后使用密码解密浏览器发送来的握手消息。计算消息的hash值,并验证是否与浏览器传递过来的hash值一致(类似一次握手)。最后再用密码加密一段握手消息发送给浏览器。
- 浏览器收到返回的数据后,会解密握手消息,并计算hash值,判断是否与网站返回的一致(类似一次握手),如果一致则握手结束,之后所有的数据都会由之前浏览器生成的随机密码并用对称加密来进行加密。
生成随机密码的算法一般使用
AES、RC4
等 对随机密码进行加密一般使用的算法是RSA算法
hash算法一般是MD5
面试官:嗯,不错。看来你对http还是有所了解的。感觉你技术还是可以的。
派大星:谢谢。