今天的一道面试题(21) -说一下HTTP各版本以及HTTPS之间区别

HTTP概述

HTTP(超文本传输协议)是一个基于TCP的应用层协议

GET和POST的区别

  • GET提交的数据放在URL中, 不适用一些私密数据的传输, POST提交的数据在header中,但是也无法保证安全性, 没有加密过
  • GET提交的数据大小有限制(是因为浏览器对URL的长度有限制,GET本身没有限制),POST没有

HTTP1.0

  • 引入了状态码
  • 为了减轻服务器的压力,在 HTTP/1.0 中提供了Cache 机制,用来缓存已经下载过的数据
  • 引入用户代理字段

HTTP1.1

  • 持久连接, 一个TCP连接可以发送多个HTTP请求
  • 浏览器为每个域名最多同时维护 6 个 TCP 持久连接
  • 使用 CDN 的实现域名分片机制
  • 不成熟的HTTP管线化(虽然持久连接可以发送多个HTTP请求, 但是它需要等待前面的请求返回之后,才能进行下一次请求。) (已放弃)
  • 虚拟主机支持 HTTP/1.1 的请求头中增加了Host 字段,用来表示当前的域名地址,这样服务器就可以根据不同的 Host 值做不同的处理。
  • 动态数据支持. HTTP/1.1 通过引入Chunk transfer 机制来解决这个问题,服务器会将数据分割成若干个任意大小的数据块,每个数据块发送时会附上上个数据块的长度,最后使用一个零长度的块作为发送数据完成的标志。
  • 客户端 Cookie、安全机制

HTTP2

HTTP1.1问题

带宽利用率不高, 主要原因如下

  • TCP慢启动
  • 同时开启了多条 TCP 连接,那么这些连接会竞争固定的带宽
  • HTTP/1.1 队头阻塞的问题. 所有请求公用一个TCP管道, 前面的请求会阻塞后面的请求

慢启动和 TCP 连接之间相互竞争带宽是由于 TCP 本身的机制导致的,而队头阻塞是由于 HTTP/1.1 的机制导致的。

引入HTTP2

HTTP/2 的思路就是一个域名只使用一个 TCP 长连接来传输数据,这样整个页面资源的下载过程只需要一次慢启动,同时也避免了多个 TCP 连接竞争带宽所带来的问题。

HTTP/2 需要实现资源的并行请求,也就是任何时候都可以将请求发送给服务器,而并不需要等待其他请求的完成,然后服务器也可以随时返回处理好的请求资源给浏览器。

HTTP/2 的解决方案可以总结为:一个域名只使用一个 TCP 长连接和消除队头阻塞问题。最重要的几个字就是多路复用机制

image

HTTP/2 使用了多路复用技术,可以将请求分成一帧一帧的数据去传输,这样带来了一个额外的好处,就是当收到一个优先级高的请求时,比如接收到 JavaScript 或者 CSS 关键资源的请求,服务器可以暂停之前的请求来优先处理关键资源的请求

HTTP2其他特性

  • 可以设置请求的优先级
  • 服务器推送
  • 头部压缩

HTTP2的缺陷

  • TCP 的队头阻塞 同一域名使用一个TCP连接造成的问题
  • TCP 建立连接的延时
  • TCP 协议僵化
  • QUIC 协议

HTTPS

采用 对称加密 和 非对称加密 结合的方式来保护浏览器和服务端之间的通信安全

  • 对称加密

通信双方使用同一个密钥进行加密和解密

  • 非对称加密

简单说就是有两把密钥,通常一把叫做公钥、一把叫私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开。

对称加密和非对称加密结合

  • 第一个是非对称加密的效率太低。这会严重影响到加解密数据的速度,进而影响到用户打开页面的速度。
  • 第二个是无法保证服务器发送给浏览器的数据安全。虽然浏览器端可以使用公钥来加密,但是服务器端只能采用私钥来加密,私钥加密只有公钥能解密,但黑客也是可以获取得到公钥的,这样就不能保证服务器端数据的安全了。

所以采用了对称加密+非对称加密的方法

在传输数据阶段依然使用对称加密,但是对称加密的密钥我们采用非对称加密来传输

具体流程如下:

  1. 客户端向服务器端发起SSL连接请求;
  2. 服务器把公钥发送给客户端,并且服务器端保存着唯一的私钥;
  3. 客户端用公钥对双方通信的对称秘钥进行加密,并发送给服务器端;
  4. 服务器利用自己唯一的私钥对客户端发来的对称秘钥进行解密,在此过程中,中间方无法对其解密(即使是客户端也无法解密,因为只有服务器端拥有唯一的私钥),这样保证了对称秘钥在收发过程中的安全,此时,服务器端和客户端拥有了一套完全相同的对称秘钥。
  5. 进行数据传输,服务器和客户端双方用公有的相同的对称秘钥对数据进行加密解密,可以保证在数据收发过程中的安全,即是第三方获得数据包,也无法对其进行加密,解密和篡改。

添加证书

服务器端会向CA申请认证书,此证书包含了CA及服务器端的一些信息(可以理解为类似公章),这样,服务器端将证书发给客户端的过程中,中间方是无法伪造的,保证了,发给客户端的公钥是服务器端发送的。

  • 通过数字证书向浏览器证明服务器的身份,
  • 数字证书里面包含了服务器公钥。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值