面试问答2:HTTP与HTTPS的区别?

“HTTP与HTTPS的区别” 这个问题还是相对比较高频的,10次面试有6次被问到,写篇文章整理一下吧,下次真不能在稀里糊涂的东扯西扯了。

HTTP

HTTP协议:超文本传输协议(Hyper Text Transfer Protocol),通过请求/响应的方式,在客户端和服务端之间进行通信的,无连接、无状态的,应用层协议。

通信过程

其实这也是那道很经典的面试题:请问输入一个URL,点击回车后发生了什么?

1.浏览器自动补全URL,进行DNS域名解析,获取目的IP
2.通过目的IP,三次握手建立TCP连接
3.浏览器向服务器发送HTTP请求,等待响应
4.服务器收到解析HTTP请求
5.服务器返回响应结果
6.浏览器收到响应结果,四次挥手断开TCP连接
7.解析HTML,进行网页布局渲染
在这里插入图片描述

HTTPS

HTTPS = HTTP+SSL/TLS

HTTP协议是明文传输,无法保证数据传输的安全性,因此引入SSL协议加持,以弥补HTTP协议安全性方面的不足。SSL协议会进行身份验证和加密传输,从而保证了数据传输的安全性。

名词解释

证书加密:CA证书,即权威机构颁发的证书。证书加密包含一对公钥和私钥,私钥加密,公钥解密。私钥在服务器端,浏览器端原本就有内置的CA证书,包含解密的公钥,可避免公钥在网络上流传,因此可以对服务端发来的CA证书进行解密验证。

对称加密
加密和解密 过程用的是同一个钥匙。这个钥匙一旦被泄露,那么这个算法等于白用了。

非对称加密
加密和解密 过程用的是不同的钥匙,一个公钥,对外公开,一个私钥,仅是解密方拥有。由于公钥和私钥是分开的,非对称加密算法安全级别高,且加密的密文长度有限制,适用于对少量数据进行加密,速度较慢。

非对称加密如何保证数据安全?

在数据传输过程中,可能会被拦截,拦截方解析报文,拿到的也只是公钥,却不能对数据解密,只有私钥才可以对数据解密,因此保证了数据的安全。

因此,用非对称加密算法对client.key进行加解密,保障钥匙的安全,然后再用安全的钥匙,保证了传输数据的安全。

通信过程

1.client端 与Server端 先建立TCP连接
2.client端 发起HTTPS请求,连接443端口号,向Server端发送自己支持的加密算法种类、客户端生成的随机数等信息。
3.Server端收到请求后,返回自己支持的加密算法种类、服务器生成的随机数,以及包含公钥和数字签名的数字证书。
4.client端 对数字证书进行验证,判断公钥的合法性。
client端 用浏览器内置的数字证书机构的公钥 对 Server端发来的数字证书进行对称解密,并用约定好的算法解析出一个数字签名,将这个数字签名与server端发来的数字证书中的数字签名进行比对,如果信息一致,则说明数字证书中的公钥是合格有效的。
5.client端 生成一个随机数作为 客户端私钥,即client.key(用于后续传输数据的对称加密),用从server端的数字证书中解密得到的公钥,对client.key进行非对称加密。
6.client端再次发起HTTP请求,连接80端口,发送经过非对称加密后的client.key。
7.Server端 收到client.key后,用自己的私钥对其进行非对称解密,得到client.key。同时,用client.key对数据进行对称加密,生成密文,发送给client端。
8.client端用client.key对称解密,得到真正的响应数据。
在这里插入图片描述

HTTP与HTTPS的区别

端口号
HTTP连接80端口,HTTPS连接443端口
安全性
HTTP是明文传输,不具有安全性
HTTPS是密文传输,安全性高。通过SSL协议,完成身份验证和加密传输,有效保障了数据传输的安全性。
效率
HTTP是不用考虑身份认证、加密解密,效率就相对较高。
HTTPS握手阶段比较费时,需要考虑SSL协议认证和加密的过程,效率相对低。
成本
HTTPS需要购买CA证书,成本相对较高。


推荐文章

[一篇逻辑清晰且画风可爱的好文]
[参考文章2]
[参考文章3]


本篇文字还是站在比较表层的角度写的,有些地方描述可能不太恰当还请谅解,同时欢迎各位读者探讨指正!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值