对线面试官 - Http 经典面试题
面试官: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 还是有所了解的。感觉你技术还是可以的。
派大星:谢谢。
如有问题,欢迎加微信交流:w714771310,备注- 技术交流 。或关注微信公众号【码上遇见你】。
版权声明: 本文为 InfoQ 作者【派大星】的原创文章。
原文链接:【http://xie.infoq.cn/article/752f873ec6a14da20936c0352】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论