HTTP与HTTPS的区别,HTTPS提高性能,HTTP2的新特性

数据传输区别

http也相当于HTTP协议,是超文本传输协议的意思,是明文传输。属于你请求的数据,不加密,直接请求服务端。   https 是http的升级,在应用层和传输层加了一层SSL校验层,对所传输的数据进行加密,进行密文传输。

安全性区别

HTTPS HTTP 安全性 高 低 数据传输 加密传输 明文传输 认证 身份认证:CA证书 身份不确定,数据可能被第三方获取 完整性 数据加密保证完整性 数据可能被拦截篡改 正确性 不可否认,无法修改 无法保证数据的真实性

端口区别

HTTPS HTTP 端口 443 80 灵活性 高 低 访问速度 慢 快 经济适用 收费 免费

交互区别

HTTP---->三次握手,流程为 客户端对服务端说,我要连接你; 服务端对客户端说,我收到了; 客户端往服务端发送数据; 这样http的一个交互流程就完成了

HTTPS---->四次握手,流程为 客户端对服务端说,我要连接你; 服务端我收到了,并且把公钥返回给客户端; 客户端拿着公钥,把自己的公钥加密,在发送给服务端; 服务端收到公钥,进行后续交互。

流程对比

HTTPS的工作流程

主要是说对称加密和非对称加密,共同使用,作为一个混合加密使用。

  1. Client发起请求(端口443)
  2. Server返回公钥证书(Server中有公钥和私钥,只发送公钥给Client)
  3. Client验证证书
  4. Client生成对称密钥,用公钥加密后发给Server
  5. Server使用私钥解密,得到对称密钥
  6. C/S双方使用对称密钥:加密明文并发送,解密密文得到明文

混合加密流程图:

HTTPS的实现原理

HTTPS实现原理包括:

    机密性 完整性 身份认证 不可否认

机密性

使用混合加密:对称加密和非对称加密   非对称加密:公钥和私钥 安全传输对称秘钥 常见算法:RSA,ECC 常见算法:效率慢,速度低

完整性

身份认证和不可否认

HTTPS 使用流程

    在服务端生成ca证书 生成私钥:key文件 创建待签名证书:csr文件 CA机构对证书签名 生成.crt文件 配置应用服务器 可在nginx中配置,加入ssl认证 在系统中安装证书

HTTPS性能优化点

    协议优化 TLS1.2->TLS1.3协议升级 密钥交换:ECDHE(椭圆曲线:x25519 ) 对称加密:AES_128_GCM 算法优化 证书优化 服务器证书:RSA->ECDSA 吊销机制:定期吊销CRL->在线状态OCSP 会话复用 Session ID、Session Ticket 认证后使用UDP,安全要考虑到。 PSK(0-RTT):Pre-shared Key, PSK是预共享密钥,是用于验证 L2TP/IPSec 连接的 Unicode 字符串。可以配置“路由和远程访问”来验证支持预共享密钥的 VPN 连接。 硬件 更快的CPU SSL加速卡 SSL加速服务器 软件升级 Linux:内核升级4.x Nginx:1.16+ OpenSSL:1.1.0/1.1.1

HTTP2的特性

向下兼容HTTP/1

HTTP/2把HTTP分解成为了“语义”“语法”两部分,其中语义层不做改动,与HTTP完全一致(比如说请求方法,URI,状态码,头字段等概念保留不变)。

特别要说的是,与 HTTPS 不同,HTTP/2 没有在 URI 里引入新的协议名,仍然用“http”表示明文协议,用“https”表示加密协议。

头部压缩

HTTP 1.x 的头部带有大量信息用于描述这次通信的的资源、浏览器属性、cookie等,而且每次都要重复发送。HTTP/2 使用encoder来减少需要传输的header大小。即: HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的 键-值 对,对于相同的数据,不再通过每次的请求和响应发送; 首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进更新; 每个新的首部 键-值 对要么被追加到当前表的末尾,要么替换表中之前的值。 简单理解: 请求1 发送了所有的头部字段,请求2 则只需要发送差异数据就行了,这样可以减少冗余数据,降低开销。

二进制

HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式。HTTP/2将所有传输信息分割为更小的消息和帧,并对它们采用二进制格式的编码将其封装,新增的二进制分帧层同时也能够保证 http 的各种动词,方法,首部都不受影响,兼容上一代http标准。其中,HTTP 1.X中的首部信息 header 封装到 Headers 帧中,而request body 被封装到Data帧中。 HTTP/2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。

虚拟流、多路复用

HTTP 1.x 中,客户端浏览器在同一时间,针对同一域名下的请求会有一定数量的限制,超过限制数目的请求会被阻塞。且如果想并发多个请求,必建立多个 TCP 链接。 在 HTTP/2 中,有了新的分帧机制后,它将不再依赖 TCP 连接去实现多流并行了,在 HTTP/2中:

同域名下所有通信都在单个连接上完成; 单个连接可以承载任意数量的双向数据流; 数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为可以根据帧首部的流标识重新组装。

这一特性带来了性能上的提升: 同个域名只需要占用一个 TCP 连接,消除了因多个 TCP 连接而带来的延时和内存消耗; 单个连接上可以并行交错的请求和响应,之间互不干扰; 在HTTP/2中,每个请求都可以带一个31bit的优先值,0表示最高优先级, 数值越大优先级越低。有了这个优先值,客户端和服务器就可以在处理不同的流时采取不同的策略,以最优的方式发送流、消息和帧。

经验分享 程序员 微信小程序 职场和发展