首页 > 其他分享 >HTTP/2 简介

HTTP/2 简介

时间:2022-11-04 22:44:25浏览次数:50  
标签:依赖 优先级 简介 数据流 HTTP 资源 客户端

1. 二进制分帧层


HTTP/2 新增了二进制分帧层, 在不修改 HTTP/1.x 的语义(包括各种动词, 方法, 首部都不受影响)的前提下, 将编码方式改变了

  • Connection 连接: 一个 TCP 连接, 包含 1 个或多个双向数据流
  • Stream 流: 双向通信的数据流, 包含 1 个或多个消息(Message). 每个数据流都有一个唯一的标识符和可选的优先级
  • Message 消息: 对应 HTTP/1.x 的逻辑消息(Request/Response), 包含完整的一系列的帧 (一个或多个)
  • Frame 帧: HTTP/2 中的最小通信单位, 以二进制压缩格式存放内容. 每个帧都有相应的数据流标识符, 这使得 HTTP/2 可以将不同数据流的帧交错发送, 到达客户端或服务器端后再将一个流中的所有帧组合起来即可

2. 多路复用技术


在 HTTP/2 传输数据的时候, 由二进制分帧层将 HTTP 消息切分成多个互不依赖的帧, 而后将不同数据流的帧交错发送(同一数据流中的帧必须保持有序). 在客户端或服务器端再根据每个帧上的数据流标识符将相应的帧组合成完整的数据流, 这使得

  • 客户端的应用层可以交错并行地发送请求, 互不影响
  • 服务器端的应用层可以交错并行地发送响应, 互不影响
  • 只需使用一个连接即可并行发送多个请求和响应
  • 不需要再为绕过 HTTP/1.x 的并行请求数量的限制做额外的工作(如雪碧图, base64等)

3. 流的请求优先级与依赖关系

HTTP/2 允许为数据流设置优先级与依赖关系, 当客户端并行地发送多个请求消息而网络状况不佳时, 优先级和依赖关系设定的重要性就体现出来了:
通过设置优先级和依赖关系, 可以提醒服务器优先响应急需的数据(如 CSS/JavaScript), 而暂缓响应相对来说无关紧要的数据(如 Img). 这样能够防止 HTML 解析阻塞的情况出现

HTTP/2 允许为数据流设置整数范围为 1~256 的权重, 以及依赖关系(在浏览器中, HTTP/2 的优先级是浏览器基于自身对资源重要性的判断设置的)

而接收数据的一方, 可以通过这些信息构建一个依赖树

  1. 在该依赖树中, 由于 Stream1 没有依赖其他的流, 故而所有的可用资源将会先分配给 Stream1(在 Stream1 没有完成之前, 依赖于 Stream1 的 Stream2 不会获得资源)
  2. 当 Stream1 完成后, 所有的可用资源将会分配给 Stream2, 依赖 Stream2 的 Stream3/4 不能获得资源
  3. 当 Stream2 完成后, 可用资源将按照 2:4 的比例分配给 Stream3 和 Stream4
  4. 当 Stream3 完成后, Stream3 所拥有的资源将会按照 6:6 的比例分配给 Stream5 和 Stream6

注意: 流的优先级和依赖关系只是期待接收方能够这么做, 而接收方也可以不按照优先级和依赖关系分配可用资源给对应的流

4. 服务器推送


服务器推送的优点

  • 客户端可以拒绝服务器推送的资源
  • 客户端可以缓存服务器推送的资源
  • 服务器推送的资源可以由不同的页面共享
  • 服务器可以按照优先级推送资源

5. 首部压缩

HTTP 的每一次通信都会携带一组首部,用于描述传输的资源及其属性。在 HTTP1.x 中,这些元数据都是以纯文本形式发送的,通常会给每个请求增加 500~800 字节的负荷。如果算上 HTTP cookie,增加的负荷通常会达到上千字节

HTTP/2 使用 HPACK 算法对 Headers 进行压缩, 有效减少了冗余数据的传输

标签:依赖,优先级,简介,数据流,HTTP,资源,客户端
From: https://www.cnblogs.com/suzukaze/p/HTTP2.html

相关文章

  • Spring事务简介
    1、事务作用:在数据层保证一系列的数据库操作同成功同失败Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败2、例子:模拟银行账户间转账业务  步骤......
  • HttpsUtil
    packagecom.raiyi.flowcenter.utils.http;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStrea......
  • Nginx配置ssl实现https访问
    导航​​一、申请SSL证书​​​​1.1阿里云服务器首页​​​​1.2SSL证书页面​​​​1.3SSL证书购买详情页​​​​1.4SSL证书申请​​​​1.5SSL证书DNS解析​​​​......
  • C# HttpClient请求gzip
    //设置HttpClientHandler的AutomaticDecompressionvarhandler=newHttpClientHandler(){AutomaticDecompression=DecompressionMethods.GZip};//创建HttpClient(......
  • C++调用HTTP(HttpSendRequest)如何设置延时
    1、解决办法:DWORDdwTimeout=3000;//3s bRet=InternetSetOption(hRequest,INTERNET_OPTION_CONNECT_TIMEOUT,&dwTimeout,sizeof(dwTimeout)); if(!bRet){......
  • 本地为内网无公网IP如何使用HTTP代理授权
    很多朋友在使用HTTP代理进行授权时,发现自己本地运营商根本没有分配公网IP,全部都是内网,无法进行IP白名单绑定授权,遇到这种情况,我们应该怎么办呢?要知道,绑定白名单,给......
  • 为什么说高匿的HTTP代理是爬虫过程中必须的
    不少人在选择代理套餐的时候,追求低成本,选择的HTTP代理套餐也是五花八门,但唯一的要求就是要便宜,能有多便宜就要有多便宜,以致于直接选择一般的透明代理也在所不惜。透明......
  • Web基础与HTTP协议
    Web基础与HTTP协议一,DNS与域名1.DNS解析DNS解析方式,三种:①/etc/hosts linux系统中负责快速解析的文件,包含了ip与主机名的映射关系,在没有DNS服务器的情况下,使用......
  • Spring Boot 运行原理 - 实例分析(HttpEncodingAutoConfiguration)
    在了解了SpringBoot的运作原理和主要注解后,现在来简单的分析一个SpringBoot内置的自动配置功能:http的编码配置。我们在常规项目中配置Http编码的时候是在web.xml添加一......
  • Docker安装Harbor证书:Error response from daemon: Get "https://xx.xx.xx/v2/": x509
    自建harbor仓库ssl证书过期之后,更换了ssl证书。jenkins流水线无法登录harbor镜像仓库、且无法拉取镜像时报,报错信息如下:Errorresponsefromdaemon:Get"https://xx.......