《我要进大厂》- 计算机网络夺命连环15问,你能坚持到第几问?(HTTP | HTTPS | HTTP演变)(下)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 《我要进大厂》- 计算机网络夺命连环15问,你能坚持到第几问?(HTTP | HTTPS | HTTP演变)

四、HTTP 与 HTTPS


4.1 HTTP 与 HTTPS 有哪些区别?


「安全」 HTTP 是超文本传输协议,信息是明文传输,存在安全⻛险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。

「建立连接」 HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之

后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。

「端口」 HTTP 的端口号是 80,HTTPS 的端口号是 443。

「可靠性」 HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。


4.2 HTTPS 解决了 HTTP 的哪些问题


HTTP 由于是明文传输,所以安全上存在以下三个⻛险:(如何解决,请看4.3)


窃听风险,比如通信链路上可以获取通信内容,用户号容易没

篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎

冒充风险,比如冒充淘宝网站,用户钱容易没。


6d87a51d552ae8fbc01d05658af90016.png


HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的⻛险:


信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。

校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾广告。

身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。

可⻅,只要自身不做「恶」,SSL/TLS 协议是能保证通信是安全的。


4.3 HTTPS 是如何解决上面的三个⻛险的?


混合加密的方式实现信息的机密性,解决了窃听的⻛险。

摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的⻛险。

将服务器公钥放入到数字证书中,解决了冒充的⻛险。

1. 混合加密


e10611cb240b7ff0a275227ba74021a9.png


HTTPS 采用的是 对称加密和非对称加密结合的「混合加密」 方式:


在通信建立前采用非对称加密的方式交换 「会话秘钥」 ,后续就不再使用非对称加密。

在通信过程中全部使用对称加密的 「会话秘钥」 的方式加密明文数据。

采用「混合加密」的方式的原因:


对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。

非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换的安全问题但速度慢。

2. 摘要算法


摘要算法用来实现完整性,能够为数据生成独一无二的「指纹」,用于校验数据的完整性,解决了篡改的⻛险


2435cecbfcf9e19ed426c4b9a35e8b55.png


客户端在发送明文之前会通过摘要算法算出明文的「指纹」,发送的时候把「指纹 + 明文」一同加密成密文后,发送给服务器,服务器解密后,用相同的摘要算法算出发送过来的明文,通过比较客户端携带的「指纹」和当前算出的「指纹」做比较,若「指纹」相同,说明数据是完整的。


3. 数字证书


客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。


这就存在些问题,如何保证公钥不被篡改和信任度?


所以这里就需要借助第三方权威机构 CA (数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。


通过数字证书的方式保证服务器公钥的身份,解决冒充的⻛险。


cf534cf362283e7904e98c533561fade.png


4.4 HTTPS 是如何建立连接的?其间交互了什么?


SSL/TLS 协议基本流程:


客户端向服务器索要并验证服务器的公钥。

双方协商生产「会话秘钥」。

双方采用「会话秘钥」进行加密通信。

具体过程见 小林的图解网络教程


43a697a9d9744e75a68720ab54fa2cfc.jpg


五、HTTP/1.1、HTTP/2、HTTP/3 演变


5.1 说说 HTTP/1.1 相比 HTTP/1.0 提高了什么性能?还存在哪些瓶颈?


HTTP/1.1 相比 HTTP/1.0 性能上的改进:


使用 TCP 长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。

支持管道网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间

但 HTTP/1.1 还是有性能瓶颈:


请求 / 响应头部(Header)未经压缩就发送(只能压缩 请求体 的部分)。

首部信息越多延迟越大;

发送冗⻓的首部。每次互相发送相同的首部造成的浪费较多;

服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞;

没有请求优先级控制;

请求只能从客户端开始,服务器只能被动响应


5.2 那上面的 HTTP/1.1 的性能瓶颈,HTTP/2 做了什么优化?


HTTP/2 协议是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的。


HTTP/2 相比 HTTP/1.1 性能上的改进:


1. 头部压缩


HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。


这就是所谓的 HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。


2. 二进制格式


HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧。


9faa79216e3815c89e021cb62f689576.png


这样虽然对人不友好,但是对计算机非常友好,因为计算机只懂二进制,那么收到报文后,无需再将明文的报文转成二进制,而是直接解析二进制报文,这增加了数据传输的效率。


3. 数据流


HTTP/2 的数据包不是按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应。


每个请求或回应的所有数据包,称为一个数据流( Stream )。每个数据流都标记着一个独一无二的编号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数.


客户端还可以指定数据流的优先级。优先级高的请求,服务器就先响应该请求。


b4f625beda1e77d569098f1e5557412a.png


4. 多路复用


HTTP/2 是可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应。


移除了 HTTP/1.1 中的串行请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟,大幅度提高了连接的利用率。


举例来说,在一个 TCP 连接里,服务器收到了客户端 A 和 B 的两个请求,如果发现 A 处理过程非常耗时,于是就回应 A 请求已经处理好的部分,接着回应 B 请求,完成后,再回应 A 请求剩下的部分。


1945cd0963f34266d3b096de8d5ded2c.png


5.服务器推送


HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务不再是被动地响应,也可以主动向客户端发送消息。


例来说,在浏览器刚请求 HTML 的时候,就提前把可能会用到的 JS、CSS 文件等静态资源主动发给客户端,减少延时的等待,也就是服务器推送


5.3 HTTP/2 有哪些缺陷?HTTP/3 做了哪些优化?


HTTP/2 主要的问题在于,多个 HTTP 请求在复用一个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。所以一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。


HTTP/1.1 中的管道( pipeline)传输中如果有一个请求阻塞了,那么队列后请求也统统被阻塞住了

HTTP/2 多个请求复用一个TCP连接,一旦发生丢包,就会阻塞住所有的 HTTP 请求

这都是基于 TCP 传输层的问题,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!


79921a662026ff96ab3bbf97dece34c1.png


UDP 发生是不管顺序,也不管丢包的,所以不会出现 HTTP/1.1 的队头阻塞 和 HTTP/2 的一个丢包全部重传问题。


大家都知道 UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。


QUIC 有自己的一套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响。


TLS3 升级成了最新的 1.3 版本,头部压缩算法也升级成了 QPack 。


HTTPS 要建立一个连接,要花费 6 次交互,先是建立三次握手,然后是 TLS/1.3 的三次握手。QUIC 直接

把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数。


cb0bbb2b9b46d0c278e36128c09e6451.png


所以, QUIC 是一个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复用的协议。


QUIC 是新协议,对于很多网络设备,根本不知道什么是 QUIC,只会当做 UDP,这样会出现新的问题。所以HTTP/3 现在普及的进度非常的缓慢,不知道未来 UDP 是否能够逆袭 TCP。


总结


OK,今天关于 计算机网络的面试题分享 就到这里,希望本篇文章能够帮助到大家,同时也希望大家看后能学有所获!!!


好了,我们下期见~


相关文章
|
2月前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
332 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
3月前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
90 3
|
5天前
|
网络协议 安全 网络安全
Introduction to the HTTP and HTTPS Protocol
HTTP protocol is the foundation of the Internet, and HTTPS is the secure version of HTTP. HTTP is an application layer protocol based on TCP/IP protocol. It does not involve packet (packet) transmission, mainly specifying the communication format between the client and the server, and the default po
55 25
|
22天前
|
安全 搜索推荐 网络安全
HTTPS与HTTP:区别及安全性对比
HTTP和HTTPS是现代网络通信中的两种重要协议。HTTP为明文传输,简单但不安全;HTTPS基于HTTP并通过SSL/TLS加密,确保数据安全性和完整性,防止劫持和篡改。HTTPS还提供身份验证,保护用户隐私并防止中间人攻击。尽管HTTPS有额外的性能开销和配置成本,但在涉及敏感信息的场景中,如在线支付和用户登录,其安全性优势至关重要。搜索引擎也更青睐HTTPS网站,有助于提升SEO排名。综上,HTTPS已成为大多数网站的必然选择,以保障用户数据安全和合规性。
45 1
|
2月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
499 7
|
2月前
|
安全 算法 网络安全
HTTP和HTTPS的区别
本文介绍HTTP与HTTPS的区别、HTTPS链接建立过程及常见加密算法。HTTP为明文传输,易被窃听;HTTPS通过SSL/TLS协议加密,确保数据安全。HTTPS使用端口443,提供认证机制。文中还详细讲解了对称加密(如AES、DES)和非对称加密(如RSA、ECC)算法的特点及应用场景。
|
3月前
|
Web App开发 Linux 应用服务中间件
【DrissionPage】Linux上如何将https改为http
通过上述步骤,可以在Linux上将DrissionPage从HTTPS改为HTTP。关键在于修改DrissionPage配置、代码中的HTTPS设置、URL以及Web服务器配置,确保所有部分都正确使用HTTP协议。通过合理配置和测试,能够确保系统在HTTP环境下稳定运行。
83 1
|
3月前
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
110 11
|
3月前
|
前端开发 JavaScript 数据库
https页面加载http资源的解决方法
https页面加载http资源的解决方法
88 5
|
2月前
|
安全 网络安全 数据安全/隐私保护
第六问:http和https区别与联系
HTTP 和 HTTPS 是现代网络通信中的两种重要协议。HTTP 是明文传输协议,无加密功能;HTTPS 在 HTTP 基础上加入 SSL/TLS 加密层,提供数据加密、身份验证和数据完整性保障。HTTP 适用于非敏感信息传输,如新闻网站;HTTPS 适用于在线支付、账户登录等需要保护用户数据的场景。
55 0