在查阅大量资料之后,我整理出了http 1.0/1.1/2/3 各个版本的知识要点和http已经https的原理剖析

HTTP 与 HTTPS 的区别

HTTP

  • HTTP 使用明文 内容可能会被窃听。
  • HTTP 不验证通信方的身份 可能会被伪装。
  • HTTP 无法证明报文的完整性 可能会被篡改。
  • HTTP 端口是 80。
  • HTTP 与 TCP 进行通信,而 https 与 SSL 或者 TLS 层通信。

HTTPS

  • HTTPS 端口是 443。
  • HTTPS 多了证书这一概念。
  • HTTPS 不是新的协议 是身披 SSL/TLS 协议外壳的 HTTP。
  • HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,HTTPS 运行在 SSL/TLS 之上,SSL/TLS 运行在 TCP 之上,所有传输的内容都经过加密的。
  • HTTPS 采用对称加密和非对称加密两者并用的加密方式。

https加密原理

谈到 HTTPS, 就不得不谈到与之相对的 HTTP。HTTP 的特性是明文传输,因此在传输的每一个环节,数据都有可能被第三方窃取或者篡改,具体来说,HTTP 数据经过 TCP 层,然后经过 WIFI 路由器、运营商和目标服务器,这些环节中都可能被中间人拿到数据并进行篡改,也就是我们常说的中间人攻击。 为了防范这样一类攻击,我们不得已要引入新的加密方案,即 HTTPS。 HTTPS 并不是一个新的协议, 而是一个加强版的 HTTP。其原理是在 HTTP 和 TCP 之间建立了一个中间层,当 HTTP 和 TCP 通信时并不是像以前那样直接通信,直接经过了一个中间层(TLS、SSL)进行加密,将加密后的数据包传给 TCP, 响应的,TCP 必须将数据包解密,才能传给上面的 HTTP。这个中间层也叫安全层。安全层的核心就是对数据加解密。

https://www.bilibili.com/video/BV1KY411x7Jp?spm_id_from=333.337.search-card.all.click
https://www.bilibili.com/video/BV17U4y127mU?spm_id_from=333.337.search-card.all.click&vd_source=f0cef0537b4f57b04d34901a8b9e6948
https采用ssl/tls进行加密,使用了对称加密,非对称加密和CA机构权威认证

具体实现过程有:ssl四次握手

  1. 客户端向服务端发送Client Hello报文,该报文包括(TLS版本,所支持的加密套件和第一个随机数)
  2. 这个阶段服务器会向客户端发送三个报文,服务端收到请求后,如果支持SSL通信,会首先以Server Hello报文进行应答,报文包括(TLS版本,所支持的加密套件和第二个随机数)然后发送数字证书,包括服务端的公钥,最后发送Server Hello Done报文,告知客户端握手协议初始化完成
  3. 客户端证书认证成功之后拿到服务端的公钥,然后生成第三个随机数(预主密钥),用公钥加密后发给服务端
  4. 服务端用自己的私钥解密获得第三个随机数(即预主密钥)然后两者用相同的加密方法混合这三个随机数,生成最终的会话密钥
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mk521pHc-1658799169768)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/17a49060d04b462fbefc86383a01f0c5~tplv-k3u1fbpfcp-watermark.image?)]

数字证书

数字证书是可信任组织颁发给特定对象的认证。
为了获取这个证书,服务器运营者需要向第三方认证机构获取授权,这个第三方机构也叫 CA(Certificate Authority), 认证通过后 CA 会给服务器颁发数字证书。
这个数字证书有两个作用:

  • 服务器向浏览器证明自己的身份。
  • 把公钥传给浏览器。

怎么验证证书的有效性?

  • 服务器把证书发送过来,证书上有一些基本信息和一个签名,签名的内容是摘要算法和摘要密文,摘要密文(指纹)是基本信息通过摘要算法计算出来的 hash 值。签名是证书机构通过私钥加密的。

  • 客户端寻找内置证书,判断服务器发来的证书是否在自己内置的证书列表,找到了就使用内置证书的公钥解密签名得到指纹内容和指纹算法,然后使用指纹算法加密基本信息得到 hash(指纹内容),拿这两个 hash 对比判断是否一致,一致就通过。


http 版本

https://coolshell.cn/articles/19840.html

1,HTTP 0.9 / 1.0

HTTP 0.9版本的协议简单到极点,请求时,不支持请求头,只支持 GET 方法
HTTP 1.0 扩展了0.9版,其中主要增加了几个变化:

  • 在请求中加入了HTTP版本号,如:GET /coolshell/index.html HTTP/1.0
  • HTTP 开始有 header了,不管是request还是response 都有header了。
  • 增加了HTTP Status Code 标识相关的状态码。
  • 还有 Content-Type 可以传输其它的文件了。
  • 并且还添加了其他的请求方法:put、delete、options…
    HTTP1.0性能上有一个很大的问题,那就是每请求一个资源都要新建一个TCP链接,而且是串行请求

2, HTTP/1.1

  • 设置 keep-alive (长链接)来让HTTP重用TCP链接,重用TCP链接可以省了每次请求都要在广域网上进行的TCP的三次握手的巨大开销
  • 支持pipeline网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间
  • 增加了 cache control 机制
  • 新增了一些请求方法
  • 新增了一些请求头和响应头,让客户端可以跟服务器端进行更多的协商
  • 正式加入了一个很重要的头—— HOST这样的话,服务器就知道你要请求哪个网站了。(多个域名解析到同一个IP上,要区分用户是请求的哪个域名,就需要在HTTP的协议中加入域名的信息,而不是被DNS转换过的IP信息)

3,HTTP/2

虽然 HTTP/1.1 已经开始变成应用层通讯协议的一等公民了,但是还是有性能问题,虽然HTTP/1.1 可以重用TCP链接,但是请求还是一个一个串行发的,需要保证其顺序。然而,大量的网页请求中都是些资源类的东西,这些东西占了整个HTTP请求中最多的传输数据量。所以,理论上来说,如果能够并行这些请求,那就会增加更大的网络吞吐和性能。

  • 多路复用 —HTTP/2是可以在一个TCP链接中并发请求多个HTTP请求,移除了HTTP/1.1中的串行请求。
  • 二进制分帧 ----HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x的文本格式,解析起来更高效
  • 首部压缩 —HTTP/2会压缩头,如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。
  • 服务器推送 —HTTP/2允许服务端在客户端放cache,又叫服务端push,也就是说,你没有请求的东西,我服务端可以先送给你放在你的本地缓存中。比如,你请求X,我服务端知道X依赖于Y,虽然你没有的请求Y,但我把把Y跟着X的请求一起返回客户端。

4,HTTP/3

HTTP/3破天荒地把HTTP底层的TCP协议改成了UDP!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值