社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
在前端面试之中经常会提到HTTP,HTTPS,HTTP2这些协议层的问题,这边稍微做个总结,也以此来加深印象。下面先抛出遇到的一些题目,本文的内容也从这些问题展开。
1. HTTP: 超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。但HTTP无状态,不加密,传输的数据都是未加密的,可能被窃听;不验证通信方的身份, 因此有可能遭遇伪装。
2. HTTPS: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS可认证用户和服务器,确保数据发送到正确的客户机和服务器;可防止数据在传输过程中不被窃取、改变,确保数据的完整性。但HTTPS协议需要ca证书,SSL证书,费用较高;握手阶段比较费时(比HTTP慢),缓存不如HTTP高效,会增加数据开销。
3. HTTP2: HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语意兼容的基础上,进一步减少了网络的延迟。实现了低延迟高吞吐量。HTTP2有二进制分帧,首部压缩,流量控制,多路复用,请求优先级,服务器推送等新特性。
(1)客户端发出请求(ClientHello): 客户端向服务端发起加密通信的请求
(2)服务器回应(SeverHello): 服务器收到客户端请求后,确认加密通信协议版本是否一致,如果版本一致则返回服务器证书,否则关闭加密通信
(3)客户端回应:客户端收到服务器回应后,客户端首先验证证书是否有效。如果证书失效,则会给访问者一个警示,由其决定是否继续连接。如果证书没失效,则使用证书中的公钥加密一个随机数(pre-master key)返回给服务器,同时返回客户端握手结束通知。
(4)服务器的最后回应:服务器收到客户端发来的pre-master key后,计算生成本次会话的“会话密钥”,向客户端发送服务器握手结束通知。 至此, 整个握手阶段结束。接下来,客户端与服务器进入加密通信(对称加密)。握手阶段为非对称加密传输。
下边为更简洁版本解释的握手过程,两者并无差别:
首先讲讲证书,证书是权威的证书颁发机构CA颁发。
制作证书: 作为服务端的A,首先把自己的公钥key1发给证书颁发机构,向证书颁发机构进行申请证书;证书颁发机构有一套自己的公私钥,CA通过自己的私钥来加密key1,并且通过服务端网址等信息生成一个证书签名,证书签名同样使用机构的私钥进行加密;制作完成后,机构将证书发给A。
校验证书真伪: 当B向服务端A发起请求通信的时候,A不再直接返回自己的公钥,而是返回一个证书;说明:各大浏览器和操作系统已经维护了所有的权威证书机构的名称和公钥。B只需要知道是哪个权威机构发的证书,使用对应的机构公钥,就可以解密出证书签名;接下来,B使用同样的规则,生成自己的证书签名,如果两个签名是一致的,说明证书是有效的;
签名验证成功后,B就可以再次利用机构的公钥,解密出A的公钥key1;接下来的操作,就是和之前一样的流程了。
中间人攻击如上图表示的过程,攻击者冒充服务端到客户端的中间者,伪造请求给服务器同时伪造回应给客户端。具体如下:
防范方法: 服务端在发送浏览器的公钥中加入CA证书,浏览器可以验证CA证书的有效性
HTTP2采用二进制格式传输,取代了HTTP1.x的文本格式,二进制格式解析更高效。
多路复用代替了HTTP1.x的序列和阻塞机制,所有的相同域名请求都通过同一个TCP连接并发完成。在HTTP1.x中,并发多个请求需要多个TCP连接,浏览器为了控制资源会有6-8个TCP连接都限制。HTTP2中同域名下所有通信都在单个连接上完成,消除了因多个 TCP 连接而带来的延时和内存消耗。而且单个连接上可以并行交错的请求和响应,之间互不干扰。 HTTP2的传输是基于二进制帧的。每一个TCP连接中承载了多个双向流通的流,每一个流都有一个独一无二的标识和优先级,而流就是由二进制帧组成的。二进制帧的头部信息会标识自己属于哪一个流,所以这些帧是可以交错传输,然后在接收端通过帧头的信息组装成完整的数据。这样就解决了线头阻塞的问题,同时也提高了网络速度的利用率。简单来说, 就是在同一个TCP连接,同一时刻可以传输多个HTTP请求。之前是同一个连接只能用一次, 如果开启了keep-alive,虽然可以用多次,但是同一时刻只能有一个HTTP请求
这边只是通过一些题目讲解了HTTP协议层,如果想跟深入地学习可以参考以下博客,这几篇博客差不多涵盖了所有内容了:
HTTP----HTTP2.0新特性
Https协议详解
HTTPs入门, 图解SSL从回车到握手
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!