本期是【大厂面试】系列文章的第3期,模拟HTTP面试内容。面试现场 面试官:你好,我是面试官xxx,请问你是大彬吗? 大彬:面试官,您好,我是大彬 面试官:现在方便面试吗? 大彬:嗯嗯,可以的 面试官:那我们现在开始面试吧 面试官:看你简历上写了熟悉HTTP,什么是HTTP? 独白:嘿嘿,就是想引导你来问这个的 大彬:嗯,HTTP协议是HyperTextTransferProtocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。协议实际上就是双方约定好的格式,确保双方都能理解这种格式。 面试官:那HTTP协议有什么特点呢? 大彬:1。HTTP允许传输任意类型的数据。传输的类型由ContentType加以标记。 大彬:2。无状态。对于客户端每次发送的请求,服务器都认为是一个新的请求,上一次会话和下一次会话之间没有联系。 大彬:3。支持客户端服务器模式。 面试官:知道HTTP长连接吗? 独白:经典面试题! 大彬:HTTP长连接,指的是复用TCP连接。多个HTTP请求可以复用同一个TCP连接,这就节省了TCP连接建立和断开的消耗。 大彬:HTTP1。0默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。 大彬:HTTP1。1起,默认使用长连接。要使用长连接,客户端和服务器的HTTP首部的Connection都要设置为keepalive,才能支持长连接。 面试官:嗯,刚刚有提到HTTP1。0和HTTP1。1,那你知道HTTP1。1和HTTP2。0的区别吗? 大彬:HTTP2。0相比HTTP1。1支持的特性如下:新的二进制格式:HTTP1。1基于文本格式传输数据;HTTP2。0采用二进制格式传输数据,解析更高效。多路复用:在一个连接里,允许同时发送多个请求或响应,并且这些请求或响应能够并行的传输而不被阻塞。头部压缩,HTTP1。1的header带有大量信息,而且每次都要重复发送;HTTP2。0把header从数据中分离,并封装成头帧和数据帧,使用特定算法压缩头帧,有效减少头信息大小。并且HTTP2。0在客户端和服务器端记录了之前发送的键值对,对于相同的数据,不会重复发送。比如请求a发送了所有的头信息字段,请求b则只需要发送差异数据,这样可以减少冗余数据,降低开销。服务端推送:HTTP2。0允许服务器向客户端推送资源,无需客户端发送请求到服务器获取。 面试官:不错不错!再问一个,你觉得HTTP通信安全吗? 独白:裸奔能安全吗。。。 大彬:HTTP是明文传输,容易被黑客窃听或篡改,不安全。 大彬:可以使用HTTPS来解决HTTP明文协议的缺陷,在HTTP的基础上加入SSLTLS协议,依靠SSL证书来验证服务器的身份,为客户端和服务器端之间建立SSL通道,确保数据传输安全。 面试官:哦?讲一下HTTPS的原理?可以详细点 独白:果然逃不掉这个问题。。。 大彬:首先是TCP三次握手,然后客户端发起一个HTTPS连接建立请求,客户端先发一个ClientHello的包,然后服务端响应ServerHello,接着再给客户端发送它的证书,然后双方经过密钥交换,最后使用交换的密钥加解密数据。 大彬:具体过程如下: 大彬:首先是协商加密算法。在ClientHello里面客户端会告知服务端自己当前的一些信息,包括客户端要使用的TLS版本,支持的加密算法,要访问的域名,给服务端生成的一个随机数(Nonce)等。需要提前告知服务器想要访问的域名以便服务器发送相应的域名的证书过来。 大彬:服务端响应ServerHello,告诉客户端服务端选中的加密算法。 大彬:接着服务端给客户端发来了证书。 大彬:客户端使用证书的认证机构CA公开发布的RSA公钥对该证书进行验证。 大彬:验证通过之后,浏览器和服务器通过密钥交换算法产生共享的对称密钥。 大彬:开始传输数据,使用同一个对称密钥来加解密。 面试官:理解的还算到位,不错!今天面试就到这,有消息会通知你。 大彬:好的,谢谢你 独白:还好,背的八股文都用上了