首页 > 其他分享 >解析HTTP/2如何提升网络速度

解析HTTP/2如何提升网络速度

时间:2023-02-20 16:02:56浏览次数:45  
标签:HTTP 浏览器 请求 网络 TCP 分帧 服务器 解析

我们知道HTTP/1.1 为网络效率做了大量的优化,最核心的有如下三种方式:

  1. 增加了持久连接;
  2. 浏览器为每个域名最多同时维护 6 个 TCP 持久连接;
  3. 使用 CDN 的实现域名分片机制。

虽然 HTTP/1.1 采取了很多优化资源加载速度的策略,也取得了一定的效果,但是 HTTP/1.1对带宽的利用率却并不理想。主要是由以下三个原因导致的。

  1. TCP 的慢启动。
  2. 同时开启了多条 TCP 连接,那么这些连接会竞争固定的带宽。
  3. HTTP/1.1 队头阻塞的问题。

基于此,HTTP/2 的思路就是一个域名只使用一个 TCP 长连接来传输数据,这样整个页面资源的下载过程只需要一次慢启动,同时也避免了多个 TCP 连接竞争带宽所带来的问题。

队头阻塞的问题,等待请求完成后才能去请求下一个资源,这种方式无疑是最慢的,所以 HTTP/2 需要实现资源的并行请求,也就是任何时候都可以将请求发送给服务器,而并不需要等待其他请求的完成,然后服务器也可以随时返回处理好的请求资源给浏览器。

解析HTTP/2如何提升网络速度_HTTP/2

HTTP/2 最核心、最重要且最具颠覆性的多路复用机制。从图中你会发现每个请求都有一个对应的 ID,如 stream1 表示 index.html 的请求,stream2 表示 foo.css 的请求。这样在浏览器端,就可以随时将请求发送给服务器了。

HTTP/2 使用了多路复用技术,可以将请求分成一帧一帧的数据去传输,这样带来了一个额外的好处,就是当收到一个优先级高的请求时,比如接收到 JavaScript 或者 CSS 关键资源的请求,服务器可以暂停之前的请求来优先处理关键资源的请求。

多路复用的实现HTTP/2 添加了一个二进制分帧层,请求和接收过程如下:

  1. 首先,浏览器准备好请求数据,包括了请求行、请求头等信息,如果是 POST 方法,那么还要有请求体。
  2. 这些数据经过二进制分帧层处理之后,会被转换为一个个带有请求 ID 编号的帧,通过协议栈将这些帧发送给服务器。
  3. 服务器接收到所有帧之后,会将所有相同 ID 的帧合并为一条完整的请求信息。
  4. 然后服务器处理该条请求,并将处理的响应行、响应头和响应体分别发送至二进制分帧层。
  5. 同样,二进制分帧层会将这些响应数据转换为一个个带有请求 ID 编号的帧,经过协议栈发送给浏览器。
  6. 浏览器接收到响应帧之后,会根据 ID 编号将帧的数据提交给对应的请求。

多路复用是 HTTP/2 的最核心功能,它能实现资源的并行传输。多路复用技术是建立在二进制分帧层的基础之上。其实基于二进制分帧层,HTTP/2 还附带实现了很多其他功能。

  1. HTTP/2 提供了请求优先级,可以在发送请求时,标上该请求的优先级,这样服务器接收到请求之后,会优先处理优先级高的请求。
  2. HTTP/2 还可以直接将数据提前推送到浏览器。
  3. HTTP/2 对请求头和响应头进行了压缩。


标签:HTTP,浏览器,请求,网络,TCP,分帧,服务器,解析
From: https://blog.51cto.com/key3feng/6068629

相关文章

  • java基础 -- 反射深入浅出与CLass源码解析
    java反射在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的......
  • 网络如何运作——详细DNS、HTTP、网站
    DNS什么是DNS?DNS(域名系统)为我们提供了一种简单的方式来与互联网上的设备进行通信,而无需记住复杂的数字。就像每个房子都有一个唯一的地址可以直接向它发送邮件一样,互联网......
  • 公交车载智能视频监控:公交运行的网络安全墙​
    ​随着我国城市化的发展,城市公交作为城市交通运输的重要组成部分,成为大家低碳环保、绿色出行的首选交通工具。由于城市公交属于公共交通,与出行乘客、司机的公共财产、人身安......
  • Python绘制神经网络模型图
      本文介绍基于Python语言,对神经网络模型的结构进行可视化绘图的方法。  最近需要进行神经网络结构模型的可视化绘图工作。查阅多种方法后,看到很多方法都比较麻烦,例如......
  • 来讲讲怎样获取到url上所有参数并以对象形式保存,再讲讲JSON解析与序列化
    theme:juejinhighlight:gi前言​​大家好,我是梁木由,一个有想头的前端,最近呢也在为明年跳槽做复习准备。但我有个朋友呢,打算在年前跳槽,这不这几天正在疯狂面试中,前两天问......
  • HTTP could not register URL http://+:8000/testservice/. Your...
     今天继续调试WCFWebAPI源代码,方向是跟踪其单元测试,结果一上手就出了一个错误: HTTPcouldnotregisterURLhttp://+:8000/testservice/.Yourprocessdoesnoth......
  • javaEE005.03 HTTP通信协议和报文、STS中tomcat目录分析、响应码 200、404、500、302
    系列文章目录文章目录​​系列文章目录​​​​前言​​​​一、tomcat目录分析​​​​二、HTTP协议​​​​1、简介:简介一般就是什么ssHTTP​​​​2.发展历程​​​​3......
  • HTTP 方法
    GET方法请注意,查询字符串(名称/值对)是在GET请求的URL中发送的:/test/demo_form.php?name1=value1&name2=value2有关GET请求的其他一些注释:GET请求可被缓存GE......
  • HTTP 状态消息
     当浏览器从web服务器请求服务时,可能会发生错误。以下列举了有可能会返回的一系列HTTP状态消息:1xx:信息消息:描述:100Continue服务器仅接收到部分请求,如果......
  • http原理(二)
    https://www.dianjilingqu.com/387084.html 在https原理中,一大争议就是服务端是否用CA私钥加密服务器公钥是-自签名证书浏览器没有CA公钥,无法解密公钥,而这与实际不符......