首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用Rust中新的async-await语法通过H2发出HTTP2请求?

使用Rust中的新的async-await语法通过H2发出HTTP2请求的步骤如下:

  1. 首先,确保你已经安装了Rust编程语言的开发环境。如果没有安装,可以通过官方网站(https://www.rust-lang.org/)提供的指南进行安装。
  2. 在你的Rust项目中,添加h2和tokio这两个依赖。在项目的Cargo.toml文件中,添加以下内容:
代码语言:txt
复制
[dependencies]
h2 = "0.3"
tokio = { version = "1", features = ["full"] }
  1. 在你的Rust代码中,引入所需的库和模块:
代码语言:txt
复制
use h2::client::Builder;
use h2::client::handshake::Handshake;
use h2::client::SendRequest;
use h2::RecvStream;
use tokio::net::TcpStream;
use tokio::runtime::Runtime;
  1. 创建一个异步函数,用于发送HTTP2请求:
代码语言:txt
复制
async fn send_http2_request() -> Result<(), Box<dyn std::error::Error>> {
    // 创建一个TCP连接
    let tcp = TcpStream::connect("your_server_address").await?;

    // 创建一个H2客户端构建器
    let mut builder = Builder::new();

    // 发起与服务器的握手
    let (h2, connection) = builder.handshake(tcp).await?;

    // 创建一个请求
    let (response, _) = h2.send_request(Default::default(), false)?;

    // 等待响应
    let response = response.await?;

    // 处理响应
    let (parts, body) = response.into_parts();
    let body = body.unwrap().into_bytes().await?;

    // 打印响应信息
    println!("Response status: {:?}", parts.status);
    println!("Response headers: {:?}", parts.headers);
    println!("Response body: {:?}", body);

    // 关闭连接
    connection.await?;

    Ok(())
}
  1. 在主函数中,创建一个异步运行时并调用send_http2_request函数:
代码语言:txt
复制
fn main() {
    let mut runtime = Runtime::new().unwrap();
    runtime.block_on(send_http2_request()).unwrap();
}

以上代码演示了如何使用Rust中的async-await语法通过H2库发出HTTP2请求。你可以根据自己的需求进行进一步的定制和扩展。如果你想了解更多关于H2库的信息,可以参考腾讯云的H2产品介绍(https://cloud.tencent.com/document/product/xxxxx)。

请注意,以上代码仅为示例,实际使用时可能需要根据具体情况进行适当的修改和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Rust日报】 2019-07-09:「官方」async-await状态报告 #2

这篇文章教你如何Rust和WASM实现类似的网站。...MVP状态 目前工作目标,以及如何将其纳入更大愿景 社区里你,能帮上什么忙。...MVP(最小可行产品)功能包括: Future trait(1.36已稳定) 基本async-await语法,正在努力赶在1.38版本稳定发布(仅限于 async fn自由函数 和 impl块中async...等async-await语法稳定就开始构建本书。 未来更大愿景: 需要一组核心async trait和组合子。基本上是futures-rs1.0版本中包含。 更好stream支持。...在trait和trait impl中async fn支持 异步闭包 你如果愿意参与贡献,可以去Rust官方仓库搜索async-await相关issues了解。

1.2K30

原来你是这样http2

ALPN则是更接近于HTTP交互方式,由客户端先发出使用某种协议请求,由服务端确认是否支持协议。ALPN为了HTTP2诞生做铺垫。 另外一个不得不提是spdy协议。...我们知道一个完整网页包含了主页请求和数次或数十次请求。HTTP/1.1已经可以并行发出所有请求.但是HTTP本身是无状态协议,它依赖于时间顺序来识别请求和响应直接对应关系。...对于h2服务器要求是h2必须了解如何设置流优先级,h2服务器需要支持server push。h2客户端需要尽量多发送请求。...http1.x做优化比如说图片资源文件不使用cookie来减少请求大小,http2header压缩功能也减少了这种影响。即使不做这种优化也亦可。...谨慎使用2.0-1.x部署方案,h2流转化成h1请求。因为这样无法发挥h2性能。 13.png CDN代理服务器h2支持,可以屏蔽h2强制走tls代理服务器。

2.5K131
  • HTTP - HTTP2 面试题

    HTTP2和HTTP请求协议都是http开头,普通用户一般是不知道客户端是否支持HTTP(或者连HTTP是啥都不知道),那么客户端是如何在地址都是以Http开头情况下识别请求是一个HTTP2连接呢...基于请求-响应模型,schema还是http或https不会有http2。 不同点:h2使用二进制传输消息并且通过HPACK压缩请求头实现流多路复用,服务器推送等。...使用h2和h2c划分加密和非加密请求有什么区别? h2使用二进制传输消息并且通过HPACK压缩请求头实现流多路复用,服务器推送等。h2c优点是性能,不需要TLS握手以及加解密。...h2流我们可以看作是实际存在,因为它是使用帧传输数据,相同 StreamId 帧组成了消息以及流;通过类比类似于我们把一个积木玩具按照一定规则拆分为不同零件,零件可以一起发送过来,组装人员只需要知道组装顺序即可还原...,到了定时时间同样一并发出,这样可以提高用户使用体验。

    67640

    写在 2021 前端性能优化指南

    更快传输: CDN 3. 更快传输: http2 4. 更快传输: 充分利用 HTTP 缓存 5. 更快传输: 减少 HTTP 请求及负载 6. 更小体积: gzip/brotli 7....更快传输: http2 http2 诸多特性决定了它更快传输速度。 多路复用,在浏览器可并行发送 N 条请求。 首部压缩,更小负载体积。...请求优先级,更快关键请求 目前,网站已大多上了 http2,可在控制台面板进行查看。...h2 由于 http2 可并行请求,解决了 http1.1 线头阻塞问题,以下几个性能优化点将会过时 资源合并。如 https://shanyue.tech/assets??...WASM JS 性能低下 C++/Rust 高性能 使用 C++/Rust 编写代码,然后在 Javascript 环境运行 试举一例: 在纯浏览器中,如何实现高性能图片压缩?

    1.3K40

    http2.0非法头部导致iphone访问白屏

    HTTP1.1中引入了Upgrade机制,使得客户端和服务端之间可以借助已有的HTTP语法升级到其他协议。对于h2c升级,正是借助Upgrade来完成。...image.png 既然PC端谷歌浏览器访问正常,而iphone却访问异常,是不是2种环境下请求存在差异呢?希望通过对比两者请求差异找到问题突破口。...如下所示,最终协商出协议版本为h2 image.png 通过抓包信息来看,协议传输上无差异,怀疑可能和响应内容有关。...总结: 1、通过如下图可以加深大家对该案例理解,并理解HTTPS ALPN协商过程原理。...✘ ✘ ✔️ 头部压缩 ✘ ✘ 使用HAPCK算法对header数据进行压缩,使数据体积变小,传输更快 服务器推送 ✘ ✘ ✔️ 3、h2c升级协商机制 客户端通过Upgrade头部传递需要升级协议版本

    2.5K240

    HTTP2即未来

    H1不是(傻逼) H2可以使用HPACK进行头部压缩,H1则不论什么请求都会发送 H2允许服务器,预先将网页所需要资源PUSH到浏览器内存当中....这些无疑都给HTTP1.1速度造成了极大影响.所以,HTTP2 不采用这种方式来,而,干脆直接使用二进制. 那,H2是怎样实现,二进制传输呢?...HTTP2 Server PUSH 这个机制算是 HTTP2 第二大 feature , 即, one-to-many 机制去请求资源.因为考虑到以前,前端请求资源是通过 document 解析来实现资源...这样,就造成了一种沟通上麻烦.所以, HTTP2 为了解决这个 bug , 决定开发出一套,可以实现 Server Push 资源机制. ?...不过, 使用 HTTP2 这种机制的话,有一下几个优于 inlining 特点: push 资源能够缓存在浏览器中 不同网页能够使用该缓存,而不用重新发起 push 资源是通过 multiplexed

    73830

    Rust日报】 2019-05-29:异步await语法最终确定

    先来看看在同步中如何取消任务: 例如 在C#中,使用CancellationToken类型变量传递给每个方法,该方法是可取消工作流一部分。...其他语言是这种方法变体: Go使用Context结构将取消请求传播到子任务。在Go中,取消请求通过Channel发出信号,因为它可以轻松地使程序等待取消请求或来自其他来源状态更新。...这些行为具有一组特定共性: 取消始终只是通过取消请求来完成,它无法执行,即使请求发出,子进程也可能运行一段时间。...所有方法都可以观察是否发生了取消,如果子方法受到影响,并且能够对其做出反应 在async/await异步中如何取消: Rust之外语言,和同步取消任务模式类似: 通过专用参数或隐式任务本地参数请求取消...比如,C# async Tasks通过CancellationToken发出取消信号。许多.NET core框架函数支持此参数以传播取消请求

    83150

    使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(1)- crate 选择及环境搭建

    前时文章《Rust 和 Wasm 融合,使用 yew 构建 WebAssembly 标准 web 前端》,即是对 Rust 生态中 WebAssembly 框架实践。...本次实践中,即是基于 Rust 技术生态,采用模板引擎,来实现 Rust web 前端开发。实践过程中,我们通过 GraphQL 服务后端 API,获取 GraphQL 数据并解析。...、类 jinja 编译型模板 horrorshow:使用 Rust 宏实现模板 ructe:高效、类型安全编译型模板 fomat:使用类 print/write/format 宏实现小型模板 markup...如果你想使用 reqwest,替换仅为一行代码(将发送 GraphQL 请求 surf 函数,修改为 reqwest 函数即可)。...如果你没有 Rust 基础,《通过例子学 Rust》作为入门资料,是个很不错选择。另外,机械工业出版社Rust 编程- 入门、实战与进阶》,非大块头厚书。

    1.7K20

    如何在Ubuntu 18.04上使用HTTP 2支持设置Nginx

    listen [::]:443 ssl http2 ipv6only=on; listen 443 ssl http2; ... 这告诉Nginx在支持浏览器中使用HTTP / 2。...使用该curl命令向您站点发出请求并查看标题: curl -I -L https://your_domain 您将看到以下输出: HTTP/1.1 301 Moved Permanently Server...导航到“ 网络”选项卡,右键单击以“ 名称”开头表标题行,然后从弹出菜单中选择“ 协议”选项。 您将在新Protocol列中看到h2(代表HTTP / 2),表明HTTP / 2正在运行。...此时,您已准备好通过HTTP / 2协议提供内容。让我们通过启用HSTS来提高安全性和性能。...如果浏览器找到HSTS标头,它将不会尝试在给定时间段内通过常规HTTP再次连接到服务器。无论如何,它只使用加密HTTPS连接交换数据。此标头还可以保护我们免受协议降级攻击。

    2.4K30

    轻松让你nginx服务器支持HTTP2协议

    ,今天我们将会讲解如何在nginx中配置HTTP2协议。...相对于HTTP1.1来说,HTTP2有如下几个优点: 使用多路复用技术,在同一个连接中可以并行处理多个请求。 可以压缩HTTP头,减少请求大小。 数据传输格式是以二进制进行,所以传输更加有效。...尽管HTTP2并不要求使用加密,但是对于现代浏览器来说如Google Chrome 和 Mozilla Firefox默认HTTP2和HTTPS是一起使用,所以如果你想配置HTTP2的话,还是需要同时配置...servers中新建一个www.flydean.com.conf文件作为今天要开启HTTP2支持域名。...打开浏览器调试开关,到网络tab,点击访问页面,可以看到下面的内容: 可以看到版本是HTTP/2并且响应头带有X-Firefox-Spdy h2

    1.5K00

    轻松让你nginx服务器支持HTTP2协议

    ,今天我们将会讲解如何在nginx中配置HTTP2协议。...相对于HTTP1.1来说,HTTP2有如下几个优点: 使用多路复用技术,在同一个连接中可以并行处理多个请求。 可以压缩HTTP头,减少请求大小。 数据传输格式是以二进制进行,所以传输更加有效。...尽管HTTP2并不要求使用加密,但是对于现代浏览器来说如Google Chrome 和 Mozilla Firefox默认HTTP2和HTTPS是一起使用,所以如果你想配置HTTP2的话,还是需要同时配置...servers中新建一个www.flydean.com.conf文件作为今天要开启HTTP2支持域名。...打开浏览器调试开关,到网络tab,点击访问页面,可以看到下面的内容: 可以看到版本是HTTP/2并且响应头带有X-Firefox-Spdy h2

    1.1K10

    Rust日报】2022-01-28 Rust 编程,2022 年展望

    Rust 还不是很主流,但凭借其忠实用户群和在科技界不断增长用例,很容易看出 Rust如何在 2022 年继续发展壮大。我们列出了许多值得期待在 Rust 世界中发生事情。...他们意图是推广 “Rust 编程语言广泛使用Rust 开发者社区是过去两年增长最快。...Crates.io 下载量超过 100 亿次,crate 是 Rust 编程生态系统中使用最多系统。...合作调度 通过协作调度开发人员负责告诉运行时一个任务何时需要花费一些时间等待 I/O。await 这是关键字的确切用途。...协作调度主要缺点是它更容易被误用:如果 aawait 被遗忘(幸运是,Rust 编译器会发出警告),或者如果事件循环被阻塞超过几微秒,它会对系统性能产生灾难性影响。

    42210

    React技巧之发出http请求

    fetch 上述示例向我们展示了,在React中,如何通过点击按钮发送HTTP POST 请求。...在handleClick函数中,我们等待POST请求完成并更新state变量。 该示例使用了原生 fetch API,但如果你使用axios依赖包,这个概念也适用。...axios 下面是如何使用axios包在点击按钮时发出http POST请求。 如果你决定使用axios,请确保你已经通过运行npm install axios安装了该软件包。...上述示例向我们展示了,如何使用axios在点击按钮时,发出http POST 请求。...如果你使用axios,请确保你已经在项目的根目录下运行npm install axios来安装该包。 使用axios包时语法更简洁一些,我们要处理实现细节也更少,但概念是一样

    74910

    Go每日一库之126:h2c(明文https)

    背景 net/http包默认支持http2,而HTTP/2强制使用TLS,所以在使用时候必须指定证书,正好最近玩过,在这写一下: 原本实现一个http服务代码: http.HandleFunc...主角h2c来了 以上是HTTP/2(h2),还有一种HTTP/2 Cleartext(h2c),是一种不需要TLS也可以支持HTTP/2 方式,但是Go并不鼓励使用它,使用它需要安装 h2c,这个包用处...,在于当客户端主动发起HTTP/2连接时,会使用h2协议,如果不是HTTP/2连接,就会选择HTTP/1.x版本协议了。...用浏览器是没辙了,浏览器对HTTP/2都是使用TLS,如果不是https请求,会退化为HTTP/1.1,curl命令也算了,主动发起H2请求需要安装nghttp2c扩展包,太折腾了 ,我们可以使用Go...http访问服务,会打印出 获取响应 200: Protocol: HTTP/2.0 以上就是 H2和H2C用法,H2C虽然可以不使用TLS进行HTTP2连接,但是我们大部分应用场景在浏览器中,浏览器必须使用

    60230

    使用 Node.js 和 Express.js 搭建简易 HTTP2 服务器

    举个例子,访问 Yahoo Flickr,可以看到它已经在使用 h2 (HTTP2) 协议 (截止 2016 年 1 月)。 ?...Yahoo Flickr 已经用上了 h2 (HTTP2) 协议 HTTP/2 在语义上和 HTTP/1.1 没有任何差别,这意味着你可以在协议报文中使用相同 XML 类语言,以及相同报头字段、...开发者们熟悉那些东西在 H2 中还是一样H2 优点包括: 多路复用:允许浏览器在一个 TCP 连接中包含多个请求,从而使得浏览器可以并行请求所有资源。...熟悉 JavaScript + Node.js 全栈开发。通过 这里 学习获取新技能和对未来自信。...现在我们首先将学习如何使用 Node.js 创建 HTTP/2 服务器,然后创建一个空文件夹和一个自签名 SSL 证书: $ mkdir http2-express $ cd http2-express

    2.8K20

    HTTP2,你值得拥有

    今天给大家普及下HTTP2一些基本概念和开启方式 HTTP2优势 HTTP1.x在当代长肥网络环境(高带宽高延时)下面临以下问题: 处理单个请求资源越来越大,而单连接只能串行请求(同个连接只能完成一个...请求体需要携带完整巨大头部,才能保持请求无状态 背负众望HTTP2终于在2015年5月RFC7540推出,HTTP2基于tcp协议,且仅在应用层变动。...nginx作为前置代理,并使用了HTTPS,那么为你网站开启HTTP2是非常简单。...如何查看开启效果: 装一个chrome插件——HTTP/2 and SPDY indicator,快速验证,如果网站是支持HTTP2,插件图标是深蓝色,反之是灰色。...当然由于使用了https(或者叫TLS),普通抓包手法是无法看到被加密数据内容,你可以通过添加SSLKEYLOGFILE环境变量配合wireshark就能看到解密后内容。

    1.3K20

    为Nginx开启HTTP2支持

    3、HTTP2多路复用,HTTP2会将所有的请求通过一个TCP连接中并发完成。...4、HTTP2服务端推送,也就是说,除了对原始请求响应之外,服务器还可以主动向客户端推送额外资源,而不需要客户端明确请求每一个资源!...HTTP2,这里提供2种验证方法: 1、通过查看请求Protocol验证 用chrome浏览器打开待验证网址并开启控制台,首先我们需要将控制台network中Protocol列调出来,方法如下图:...」作为判断标识         if(spdy && /^h2/i.test(info)) {             return console.info('本站点使用了HTTP/2...');         }     }     console.warn('本站点没有使用HTTP/2'); })(); 如果是基于HTTP2传输,那么会显示“本站点使用了HTTP/2”

    2.3K21

    记一次kubernetes集群异常:kubelet连接apiserver超时

    简单做了一个测试,使用iptables规则drop掉kubelet发出流量来模拟网络异常。...kubelet源码,发现kubelet默认是使用h2协议,具体代码实现在SetTransportDefaults这个函数中。...可以通过设置环境变量DISABLE_HTTP2来禁用h2,简单验证了一下,显式设置该环境变量禁用h2后,让连接使用http1.1确实没有这个问题了。...在h2中,为了提高网络性能,一个主机只建立一个连接,所有的请求通过该连接进行,默认情况下,即使网络异常,他还是重用这个连接,直到操作系统将连接关闭,而操作系统关闭僵尸连接时间默认是十几分钟,具体时间可以调整系统参数...至此这个就算完全修复了,当然可以通过上文提到h2增加Ping frame方式解决该问题,这是这种方案可能比较复杂,修复时间比较长。

    4.8K40

    让互联网更快协议,QUIC 在腾讯实践及性能优化

    ②表示从 html 里发出资源请求。 ③表示数据上报请求。 测试流程 整个测试流程通过 python 脚本和 adb shell 工具自动化进行。其中移动端和 PC 端控制流程有所区别。...image.png 如何优化呢?通过异步代理方式显然不可能。原因是: 会极大降低用户访问速度。由于应用层每一个字节都需要对称加解密,使用异步方式实现会严重降低加解密实时性。...AES-NI 指令 AES-NI 是 intel 推出针对 AES 对称加密算法进行优化一系列指令,通过硬件计算实现计算速度提升。 如何测试 AES-NI 性能呢?...,能够更早发出请求。...此外 quic 请求发出时间 (reqStart) 比 h2 平均减少 250ms; 另外 quic 请求页面加载完成时间 (loadEnd) 平均减少 2s,由于整体页面比较复杂, 很多其它资源加载阻塞

    2.4K70

    WEB加速,协议先行 ( 上)

    HTTP1.1然后就到了HTTP2协议,HTTP1.1语义需要经过HTTP2 frame封装,比如Get请求会经过HEADERs frame封装,Post请求body需要经过HTTP2 data...事实上HTTP2 RFC7540规定,HTTP2有两种实现,一种是H2,需要强制加密;还有一种H2C,这里C是指clear,就是明文,不需要加密意思。...为了减少WIFI影响,我们同样使用USB线将手机和电脑连接,使得手机直接通过有线网络去请求页面,因为有线网络相对要稳定很多,能很大程度地减少WIFI影响。...那采集了这么多协议相关信息,拿到了这么多数据,我们该如何分析?...我们清晰地看到它使用TLS1.1,1.0,以及其他密码套件一些性能数据,为什么快,为什么慢,通过这样多维度对比,一目了然。

    1.9K20
    领券