HTTP Study

HTTP 

定义:在两点之间传输文本,视频,图片等超文本数据的协议和规范

来自3.1 HTTP 常见面试题 | 小林coding (xiaolincoding.com)

HTTP风险

窃听:

通信使用明文,https通过信息加密(混合加密)解决

对称加密和非对称加密

篡改:

无法验证报文的完整性,https通过校验机制(摘要算法)解决

摘要算法 + 数字签名

摘要算法算出内容的哈希值

但是有人把内容和哈希值一起更换了就看不出来内容被篡改过了,因为没有识别服务器的身份,所以采用非对称加密(私钥加密,公钥解密,加密的不是内容,而是哈希值)

但是如果有人把公钥和私钥都换了呢,也还是不安全,那就引入数字证书

冒充:

无法验证通信方的身份,https通过身份证书(服务器公钥放在数字证书里)解决

数字证书:

个人信息+公钥+数字签名

首先CA机构用自己的私钥进行加密,生成数字签名,在服务器发送信息时附带发送数字证书

流程:服务端发送信息+数字证书-----------------》客户端拿到数字证书后使用CA的公钥解密确认数字证书的真实性-----------》使用服务器公钥对报文进行加密后发送-----------》服务器使用私钥解密

 

HTTPS连接过程

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

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

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

Client Random、Server Random、pre-master key在前面的交换过程中双方都已确认,由这三部分组成之后对称加密的密钥

 

 

HTTP的演进

HTTP1.1 VS HTTP1.0

改进:

  1. 长连接

  2. 支持管道传输,接下来的请求不需等待前面的应答返回即可发送

缺点:

  1. 只压缩了Body部分,头部不可压缩,首部信息对延迟有影响

  2. 因为基于请求-响应模式,服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,会导致响应的队头阻塞(服务器响应慢的话,客户端会一直收不到数据)

  3. 服务器不能主动发送

HTTP2

基于HTTPS

改进:

  1. 头部压缩:发现多个请求头部相似会去掉重复部分;实现原理:客户端和服务端会维护一张头信息表,一个字段对应一个索引,之后发送索引号就可以

  2. 二进制传输:不是纯文本形式的报文,而是全面采用了二进制格式(增加了数据传输的效率)

  3. 数据流:可指定优先级

  4. 多路复用:通过 Stream 的并发能力实现并行传输,不用等待需要的返回数据全部加载完毕,可以先处理耗时短的请求(解决了队头阻塞问题,但是TCP层的队头阻塞问题并没有解决)

  5. 服务器可主动推送(减少了客户端的请求次数)

缺点:

  1. TCP层的队头阻塞问题并没有解决:TCP 层必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区里的数据返回给 HTTP 应用一旦发生丢包,就会阻塞住所有的 HTTP 请求,这属于 TCP 层队头阻塞。

     

HTTP3

改进:

  1. HTTP1.1通过管道解决了请求的队头阻塞,并没有解决响应的队头阻塞,HTTP2.0通过多个请求复用一个TCP连接解决了响应的队头阻塞但是没有解决TCP层面的阻塞,所以HTTP3使用UDP协议,基于QUIC实现可靠传输

QUIC特点:

  1. 无队头阻塞:(同一条TCP连接上可并发多个数据流),当某个流发生丢包只会阻塞自己,不影响其他

  2. 连接更快:对于HTTP1和HTTP2,先TCP握手再TLS握手

posted @ 2022-07-22 11:49  山野村夫01  阅读(42)  评论(0编辑  收藏  举报