【http1.1:http2.0】

1. http/1.1

做了以下改进

  1. 持久连接
    引入了持久连接,即TCP连接默认不关闭,可以被多个请求
    复用,不用声明 Connection: keep-alive (对于同一个域名,大
    多数浏览器允许同时建立6个持久连接)

    http1.1的长连接减少了三次握手和四次挥手的次数,不
    过需要前一次请求的响应返回后才能发送下一次请求,
    但是有个问题,在不释放连接的情况下如何才能判断请
    求已经结束,例如浏览器怎么知道数据传输完毕了?
  2. 管道机制
    即在同一个TCP连接里面,客户端可以同时发送多个请求。
  3. 分块传输编码
    即服务端没产生一块数据,就发送一块,采用”流模式”而
    取代”缓存模式”。
  4. 新增请求方式
    PUT:请求服务器存储一个资源;
    DELETE:请求服务器删除标识的资源;
    OPTIONS:请求查询服务器的性能,或者查询与资源相关的
    选项和需求;
    TRACE:请求服务器回送收到的请求信息,主要用于测试或
    诊断;
    CONNECT:保留将来使用

1.1 缺陷

虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据
通信是按次序进行的。服务器只有处理完一个请求,才会接着处
理下一个请求。如果前面的处理特别慢,后面就会有许多请求排
队等着。这将导致“队头堵塞”

对头堵塞
正如你所见的,浏览器客户端浪费了大量的时间等待资源返
回。主要是因为HTTP/1无法通过单一的连接来进行并发的请
求,所以浏览器通常情况下采用打开多个连接的方式来加速获
取资源的进程。
奢侈的链接
然而使用打开多个连接来辅助加速的方式,从计算机网络的角
度来看,每打开一个链接都是非常奢侈的。由于建立连接的花
销非常大,目前的浏览器都会对HTTP/1.1的最大连接数进行限
制,一般为6-8个。但是很多网站,会去请求80个乃至更多的资
源,因此,这个限制也会导致很大的性能瓶颈。

1.2 解决方案

  • JS文件的合并。我们现在优化的一个主要方向就是尽量的减少
    HTTP的请求数, 对我们工程中的代码,研发时分模块开发,上
    线时我们会把所有的代码进行压缩合并,合并成一个文件,这样
    不管多少模块,都请求一个文件,减少了HTTP的请求数。但是
    这样做有一个非常严重的问题:文件的缓存。当我们有100个模
    块时,有一个模块改了东西,按照之前的方式,整个文件浏览器
    都需要重新下载,不能被缓存。
  • 多域名提高浏览器的下载速度。之前我们有一个优化就是把css
    文件和js文件放到2个域名下面,这样浏览器就可以对这两个类
    型的文件进行同时下载,避免了浏览器6个通道的限制,这样做
    的缺点也是明显的,1.DNS的解析时间会变长。2.增加了服务器
    的压力。

2.http/2.0

特点:

  1. 多路复用,而非有序并阻塞的、只需一个连接即可实现并行;
  2. 采用二进制格式而非文本格式;
  3. 使用报头压缩,降低开销
  4. 服务器推送

2.1多路复用

HTTP/2 复用TCP连接,在一个TCP链接里,客户端和浏览器都
可以同时发送多个请求或回应.
单一链接:
在HTTP/2中,客户端向某个域名的服务器请求页面的过程
中,只会创建一条TCP连接,即使这页面可能包含上百个资
源。而之前的 HTTP/1.x 一般会创建6-8条TCP连接来请求这
80多个资源。单一的连接应该是HTTP2的主要优势,单一的
连接能减少[TCP握手]带来的时延(如果是建立在SSL/TLS上
面,HTTP2能减少很多不必要的[SSL握手])
多路复用:多路复用允许多个request-response消息通过一个
HTTP/2连接进行传输
如果对比的是一个更常见的一个场景80个请求需要请求的时
候,通过HTTP/1.1每次建立6-8个连接去处理和HTTP/2通过一
个连接就可以获取所有的请求,结果一目了然。

2.2 二进制协议

在 HTTP1.1 的协议中,我们传输的 request 和 response 都是基本于
文本的,这样就会引发一个问题:所有的数据必须按顺序传
输,比如需要传输: hello world ,只能 先把hello单词发送完再
发送world,不能并行发送两个单词,不然服务器收到的可能就
是HWeolrllod(注意是穿插着发过去了,但是顺序还是不会
乱)。这样服务器就懵b了。
在这里插入图片描述

2.3流的特性:

流代表了一个完整的请求-响应数据交互过程。它具有如下几个特
点:

  1. 双向性:同一个流内,可同时发送和接受数据。
  2. 有序性:流中被传输的数据就是 二进制帧 。帧在流上的被发送与
    被接收都是按照顺序进行的。
  3. 并行性:流中的 二进制帧 都是被并行传输的,无需按顺序等待。
    但却不会引起数据混乱,因为每个帧都有顺序标号。它们最终会
    被按照顺序标号来合并。
  4. 流的创建:流可以被客户端或服务器单方面建立, 使用或共享。
  5. 流的关闭:流也可以被任意一方关闭。

2.4报头压缩

HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所
以,请求的很多头字段都是重复的,比如Cookie,一样的内容
每次请求都必须附带,这会浪费很多带宽,也影响速度。
对于相同的头部,不必再通过请求发送,只需发送一次;
HTTP/2 对这一点做了优化,引入了头信息压缩机制;
头信息使用gzip或compress压缩后再发送;

2.5 服务器推送

HTTP/2 允许服务器未经请求,主动向客户端发送资源;
通过推送那些服务器任务客户端将会需要的内容到客户端的缓存
中,避免往返的延迟.
当页面还没有开始请求具体的资源时,服务端就已经把一些
资源(像css和js)已经推送到客户端了。当浏览器要渲染页
面时,资源已经在缓存中了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值