网络-HTTP、HTTPS、HTTP2.0

一、密码学基础
明文

明文指的是未被加密过的原始数据。

密文

明文被某种加密算法加密之后的数据。

密钥

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。

对称加密

对称加密又叫做【私钥加密】,即信息的发送方和接收方使用同一个密钥去加密和解密数据。

加密过程: 明文 + 加密算法 + 私钥 => 密文
解密过程: 密文 + 解密算法 + 私钥 => 明文

其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。

对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。

非对称加密

非对称加密也叫做公钥加密。非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。

用公钥或私钥中的任何一个进行加密,用另一个进行解密,被公钥加密过的密文只能被私钥解密,被私钥加密过的密文只能被公钥解密。

加密过程: 明文 + 加密算法 + 公钥(私钥) => 密文
解密过程:密文 + 解密算法 + 私钥(公钥) => 明文

由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。

加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
在非对称加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。

二、http1.0 和 http1.1 的区别

http1.X版本的缺陷概括来说是:线程阻塞,在同一时间,同一域名的请求有一定的数量限制,超过限制数目的请求会被则塞。

http1.0

缺点:浏览器和服务器只保持短暂的连接,浏览器的每次请求都需要对服务器建立一个 TCP 连接(TCP 连接的成本很高没因为每次新建都需要对服务器三次握手),服务器请求完成后立刻断开 TCP 连接,服务器也不会记录过往的每次请求。

解决方式:在请求的头信息中添加 Connection 字段并设定值为 keep-alive

http1.1

而 http1.1 相对于 http1.0 提升了下面这些点:

  1. 引入持久连接 : 即 TCP 默认不关闭,可以被多个请求复用,不用声明 keep-alive (对于同一个域名,大多数浏览器允许同时建立 6 个连接)
  2. 管道机制 : 同一个 TCP 连接中,客户端可以同时发送多个请求
  3. 分块传输编码 : 服务器每产生一块数据,就发送一块,用 流模式 取代 缓存模式
  4. 新增请求方式
       PUT:请求服务器存储一个资源
       DELETE:请求服务器删除标识的资源
       OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求
       CONNECT:保留请求以供将来使用
       TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断

但是虽然相对于 http1.0 改进了很多地方, http1.1 还是有些许缺点:

  1. 队头拥塞 :虽然允许了 TCP 的多路复用,但是在同一个 TCP 连接中,所有的请求都还是按照次序执行的,服务器只有在一个请求处理完了之后才会接着处理下一个,这导致的问题是如果排在前面的请求很慢,那么后面的请求就会一直处于等待状态。
  2. 单向请求,只能由客户端发起。
  3. 请求报文与响应报文首部信息冗余量大。
  4. 数据未压缩,导致数据的传输量大
三、http 和 https 的区别
https 的主要作用

对数据进行加密,并建立一个安全通道,以此来保证传输过程中数据的安全。
对网站服务器进行真实的身份认证。

https 和 http 的区别
  1. https 是加密传输协议,http 是明文传输协议
  2. https 需要用到 ssl 证书,http 不用
  3. https 比 http 更加的安全,对搜索引擎更加友好,利于 seo
  4. https 标准端口 443,http 标准端口 80
  5. https 基于传输层,http 基于应用层
https 和 http 在工作流程上的区别

http 的工作流程:

  1. 建立一个 TCP 连接
  2. 浏览器发送 http 请求信息到服务端
  3. 服务器发送 http 回应信息到浏览器
  4. tcp 连接关闭

由于 https 在 http 的基础上新增了 ssl 证书的验证,所以在进行 http 请求之前,会进行如下的验证:

  1. 验证服务器端
  2. 客户端和服务器端选择加密算法和密码,确保双方都支持
  3. 验证客户端(可选)
  4. 使用公钥加密技术来生成共享加密数据
  5. 创建一个加密的 SSL 连接
  6. 基于该 SSL 连接传递 HTTP 请求
四、HTTP2.0特性

2012年google提出了了SPDY方案,SPDY可以说是综合了HTTPS和HTTP两者有点于一体的传输协议。

SPDY位于HTTP之下,TCP和SSL之上,这样可以轻松兼容老版本的HTTP协议(将HTTP1.x的内容封装成一种新的frame格式),同时可以使用已有的SSL功能。

HTTP2.0可以说是SPDY的升级版,但是,HTTP2.0 跟 SPDY 仍有不同的地方,主要是以下两点:

  1. HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
  2. HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE
1. 新的二进制格式(Binary Format)

HTTP1.1 的头信息是 ASCII 编码(文本),而数据体可以使二进制也可以是文本,但是 http2.0 无论是头信息还是数据体都是二进制,统称为帧,这是因为二进制解析起来更加的高效,并且紧凑,出错率也更少。

为了保证HTTP不受影响,那就需要在应用层(HTTP2.0)和传输层(TCP or UDP)之间增加一个二进制分帧层。在二进制分帧层上,HTTP2.0会将所有传输的信息分为更小的消息和帧,并采用二进制格式编码,其中HTTP1.x的首部信息会被封装到Headers帧,而Request Body则封装到Data帧。

2. 首部压缩

HTTP1.1并不支持HTTP首部压缩,为此SPDY和HTTP2.0出现了。SPDY是用的是DEFLATE算法,而HTTP2.0则使用了专门为首部压缩设计的HPACK算法。

HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如 Cookie ,一样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度。

所以 HTTP2.0 对于相同的头部,不必再通过请求发送,只需发送一次。 并且引入了头信息压缩机制,使用 gzip 或 compress 压缩后再发送。

另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。

3. 多路复用(MultiPlexing)

在HTTP1.x中,我们经常会使用到雪碧图、使用多个域名等方式来进行优化,都是因为浏览器限制了同一个域名下的请求数量,当页面需要请求很多资源的时候,队头阻塞(Head of line blocking)会导致在达到最大请求时,资源需要等待其他资源请求完成后才能继续发送。

HTTP2.0中,基于二进制分帧层,HTTP2.0可以在共享TCP连接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义,交错发出去,在另一端根据流标识符和首部将他们重新组装起来。

通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。

4. 请求优先级

把HTTP消息分为很多独立帧之后,就可以通过优化这些帧的交错和传输顺序进一步优化性能。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。

5. 服务端推送(server push)

服务端推送是一种在客户端请求之前发送数据的机制。在HTTP2.0中,服务器可以对一个客户端的请求发送多个响应。如果一个请求是由你的主页发送的,服务器可能会响应主页内容、logo以及样式表,因为他知道客户端会用到这些东西。这样不但减轻了数据传送冗余步骤,也加快了页面响应的速度,提高了用户体验。

推送的缺点:所有推送的资源都必须遵守同源策略。换句话说,服务器不能随便将第三方资源推送给客户端,而必须是经过双方的确认才行。

6. 基于HTTPS的加密协议传输

提高了传输数据的可靠性。

五、HTTP2.0的升级改造

对比HTTPS的升级改造,HTTP2.0或许会稍微简单一些,你可能需要关注以下问题:

  1. 前文说了HTTP2.0其实可以支持非HTTPS的,但是现在主流的浏览器像chrome,firefox表示还是只支持基于 TLS 部署的HTTP2.0协议,所以要想升级成HTTP2.0还是先升级HTTPS为好。
  2. 当你的网站已经升级HTTPS之后,那么升级HTTP2.0就简单很多,如果你使用NGINX,只要在配置文件中启动相应的协议就可以了,可以参考NGINX白皮书,NGINX配置HTTP2.0官方指南。
  3. 使用了HTTP2.0那么,原本的HTTP1.x怎么办,这个问题其实不用担心,HTTP2.0完全兼容HTTP1.x的语义,对于不支持HTTP2.0的浏览器,NGINX会自动向下兼容的。
六、总结

HTTP = HTTP + TCP
HTTPS = HTTP + SSL/TLS + TCP
HTTP2.0 = HTTP + SPDY + SSL/TLS + TCP

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值