HTTP1.1、HTTPS、HTTP2.0 、HTTP3.0

HTTP1.1

优点:

整体方面:简单、灵活和易于扩展、应用广泛和跨平台

性能方面:长连接、管道网络传输解决请求队头阻塞(没有使用)

缺点:

安全方面:无状态、明文窃听、伪装、篡改

性能方面:

  • Header未经压缩就发送,只能压缩body,头部冗长
  • 每次发送相同的首部造成比较多的性能浪费
  • 响应队头阻塞
  • 没有优先级控制权
  • 服务器只能被动响应

如何优化:

  • 使用缓存(本地缓存与协商缓存)避免发送HTTP请求
  • 通过减少重定向次数、合并请求、延迟发送请求(按需获取)的方式在需要发送HTTP的时候,减少请求次数
  • 减少服务器HTTP响应的数据大小(有损压缩和无损压缩)

HTTPS

与HTTP的区别:

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

  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。

  • 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。

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

解决了HTTP的问题:

  • 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
  • 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
  • 冒充风险,比如冒充淘宝网站,用户钱容易没。

如何优化:

HTTPS与HTTP多了一个TSL握手过程,目的是为了通过非对称加密协议交换对称加密的秘钥,这个过程最长会花费掉2RT的时间。这个过程是会产生新能消耗的,后面的对称加密环节消耗非常小,可以忽略。 除了握手过程会发生网络延时,同时一些步骤也会产生性能损耗。

具体体现为:

  • 对于 ECDHE 密钥协商算法,握手过程中会客户端和服务端都需要临时生成椭圆曲线公私钥;
  • 客户端验证证书时,会访问 CA 获取 CRL 或者 OCSP,目的是验证服务器的证书是否有被吊销;
  • 双方计算 Pre-Master,也就是对称加密密钥;

HTTP1.1、HTTPS、HTTP2.0 、HTTP3.0_第1张图片

 硬件层面的优化:因为 HTTPS 是属于计算密集型,应该选择计算力更强的 CPU,而且最好选择支持 AES-NI 特性的 CPU,这个特性可以在硬件级别优化 AES 对称加密算法,加快应用数据的加解密。

软件层面的优化:把软件升级成较新的版本,比如将 Linux 内核 2.X 升级成 4.X,将 openssl 1.0.1 升级到 1.1.1

协议层面的优化:

  • 密钥交换算法应该选择 ECDHE 算法,而不用 RSA 算法,因为 ECDHE 算法具备前向安全性,而且客户端可以在第三次握手之后,就发送加密应用数据,节省了 1 RTT。
  • 将 TLS1.2 升级 TLS1.3,因为 TLS1.3 的握手过程只需要 1 RTT,而且安全性更强。

对于证书优化的方向:

  • 服务器应该选用 ECDSA 证书,而非 RSA 证书,因为在相同安全级别下,ECC 的密钥长度比 RSA 短很多,这样可以提高证书传输的效率;
  • 服务器应该开启 OCSP Stapling 功能,由服务器预先获得 OCSP 的响应,并把响应结果缓存起来,这样 TLS 握手的时候就不用再访问 CA 服务器,减少了网络通信的开销,提高了证书验证的效率;

重连方面:

对于重连 HTTPS 时,我们可以使用一些技术让客户端和服务端使用上一次 HTTPS 连接使用的会话密钥,直接恢复会话,而不用再重新走完整的 TLS 握手过程。

常见的会话重用技术有 Session ID 和 Session Ticket,用了会话重用技术,当再次重连 HTTPS 时,只需要 1 RTT 就可以恢复会话。对于 TLS1.3 使用 Pre-shared Key 会话重用技术,只需要 0 RTT 就可以恢复会话。

这些会话重用技术虽然好用,但是存在一定的安全风险,它们不仅不具备前向安全,而且有重放攻击的风险,所以应当对会话密钥设定一个合理的过期时间。

HTTP2.0 

优点(相对于1.1) :

性能方面:

  • 头部压缩,如果多个请求的头部相同,协议会自动帮助消除重复的部分(原理是维护了一个车表,使用索引来记录字段,如果是相同的字段,直接使用索引即可)
  • 报文形式采用二进制格式,使用了静态表
  • 并发传输,引入了Stream的概念,在HTTP层解决了队头阻塞的问题
  • 服务器主动推送

缺点:

  1. 一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来

HTTP/3 

(QUIC协议)优点 :

  • 把HTTP下面的TCP协议换成了UDP,解决了队头阻塞问题,同一个连接上面并发传输多个Stream(http请求),不同的Stream不会互相影响
  • 更快的连接建立,解决TCP与TLS的握手时间延迟
  • 连接迁移

你可能感兴趣的:(计算机网络,https,网络协议,http)