js特效演示网站,wordpress开启2级域名,网页设计页面,邹平做网站公司序言 在之前的文章中我们介绍过了 HTTP/1.1 协议#xff0c;现在再来认识一下迭代版本 2。了解比起 1.1 版本#xff0c;后面的版本改进在哪里#xff0c;特点在哪里#xff1f;话不多说#xff0c;开始吧⭐️#xff01; 一、 HTTP / 1.1 存在的问题 很多时候新的版本的…序言 在之前的文章中我们介绍过了 HTTP/1.1 协议现在再来认识一下迭代版本 2。了解比起 1.1 版本后面的版本改进在哪里特点在哪里话不多说开始吧⭐️ 一、 HTTP / 1.1 存在的问题 很多时候新的版本的产生都是需要解决老的版本存在的问题HTTP / 1.1 存在的问题如下 头部字段过大且重复 如果大家抓过包的话就很能直观的感受这句话。HTTP / 1.1 的头部携带着数据量在有时候会很大特别是 Cookies 和 User-Agent 的体量让大家直观感受一下 Cookie: Hm_lvt_ab984c6961d35319708c19c75e093eee1737127750; Hm_lpvt_ab984c6961d35319708c19c75e093eee1737127750; HMACCOUNT8DE7CD8295FF210E; UM_distinctid19474e1e9808f-0fac1ea52408b5-4c657b58-190140-19474e1e9811325 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0 因为 HTTP 是无状态的所以说每次传输数据的时候都需要带上这就会造成报文体量的增加。 响应队头阻塞 HTTP / 1.1 为了提升速度支持同时发送多个请求。但是不管你同时发多少请求我都会优先处理先到达的只有第一个请求响应处理完成之后才回去处理之后的请求。这样的话如果第一个请求的数据特别大那好你后面的人全给我等着这就是队头阻塞。 在这里列举一个餐馆的例子来自于知乎特别形象理解这个就很好理解 HTTP 2 的并发是咋回事一个餐厅同时可以容纳多个客人请求但是餐厅每次会将先来客人的菜上齐了才会取准备下一桌如果前面一桌的才特别多那后面的人只有干等着。 被动传输数据 在 HTTP / 1.1 中 只有客户端向服务器请求数据服务器不能向客户端主动推送数据。如果一个页面需要渲染的内容很多需要请求较多数据只能客户端主动请求服务器不能主动的推送。 二、 HTTP / 2 的新特性
1. 二进制格式传输数据 在 HTTP / 1.1 的协议是使用文本的格式传输数据但在 HTTP / 2 采用了二进制的格式传输数据这样提高了 数据处理效率 以及 数据传输效率。 数据处理效率我们的机器本身只能识别并运算二进制的数据使用文本传输的话还需要对数据进行解析机器才能够直接使用但是使用二进制传输就省去了这一过程。 数据传输效率就拿一个整数 123456 示例
在文本中需要使用 6 个字节表示在二进制中一个整数类型只需要 4 字节
这不就节约了传输成本增加了传输效率吗。 在 HTTP / 1.1 中我们的一个请求对应一个请求报文一个响应对应一个响应报文这是在应用层传输的基本单位。但是 HTTP / 2 的话就不一样了传输的基本单位是一个 帧 大小默认是 16 KB当我们数据太大时会被分为多个帧。
2. 头部压缩HPACK 在 HTTP / 1.1 中每个 HTTP 请求和响应都会携带头部数据而这些头部数据大多数情况下是重复的。例如许多请求和响应都会重复包含相同的字段如 User-Agent、Host、Accept-Encoding 等。 HTTP / 2 使用了 HPACK HEAD PACK 把头打包的方式来压缩头部信息
静态表Static Table
HPACK 使用一个静态表来存储常见的 HTTP 头部字段及其值总共 61 条。静态表的内容是固定的所有 HTTP/2 实现都共享这一表 可以发现每一个字段都对应了一个 index在压缩时HPACK 会使用这个索引值来代替字段名从而减少传输的字节数效率是很客观的
动态表Dynamic Table
动态表用来存储当前连接中未出现在静态表的头部字段信息当该新的头部字段发送时会记录下来当下一次使用到时就可以使用索引
3. 服务器推送Server Push 是的服务器也能主动的给我们的客户端推送数据了。就比如下面的场景当浏览器请求一个 HTML 页面时也许这个页面还需要各种图片css等数据。原来只能浏览器主动的请求服务器才会被动的给我们。现在的话服务器知道我们还缺什么直接主动的推送给我们。 这样的话减少了客户端请求的次数提升了页面渲染的效率。
4. 并发传输数据多路复用 最重要的特性来啦但是在开始之前我想先给大家接着列举餐馆的例子。让大家粗俗的目标他的大致原理这样也许就更能好好的理解。 HTTP / 2 开的餐馆也可以同时接纳许多客人但是为了照顾每一位客人的感受避免等待太多的时间。他选择了交替的给每一桌上菜这样后来的客人不要等着前面的吃完了才轮着他。 首先我们先理解 HTTP / 2 中新增的 stream 流 的概念流使得同一个连接可以同时并行处理多个请求和响应而不必等待某个请求的处理完成才能开始下一个请求。 一个流当中可以传输多个信息一个信息由一个或多个帧组成所以一个流中包含了多个帧。我们现在来看图说话 这是 HTTP / 1.1熟悉的队头阻塞。现在来看看 HTTP / 2是如何解决的 不同的流可以交替的发送数据因为每一个帧都会携带 stream 的 id所以到客户端之后数据会组装成一个完整的 stream。 三、HTTP / 2 不足之处
1. TCP 队头阻塞问题 咦HTTP / 2不是有效的解决了队头阻塞问题吗是的但是他解决的是响应队头阻塞问题但是我这里说的是 TCP 队头阻塞比如 TCP 协议如果前面的数据丢了后面的数据即使到了也需要等待前面的数据就绪。对于上层来说拿不到数据不久阻塞了吗所以说不管你上层怎么设计也离不开下层的坎儿。 HTTP / 3 会采用 UDP 传输数据就算是数据丢了也不会阻塞。但是回依靠其他技术实现可靠性。 2. 连接建立时间消耗 HTTP/2 依然基于 TCP 进行连接建立而 TCP 连接的建立过程需要经过三次握手。尽管 HTTP/2 允许在一个连接中复用多个请求但每次新连接的建立仍然需要一定的时间。 在客户端和服务器之间建立新连接时由于需要执行三次握手过程连接建立的延迟可能会影响 Web 页面的加载速度尤其在需要频繁建立连接的场景中。