当前位置: 首页 > 后端技术 > Java

腾讯面试,你真的懂HTTP吗?

时间:2023-04-01 15:03:20 Java

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