2个版本
0.3.15 | 2023年2月4日 |
---|---|
0.3.14 | 2022年10月1日 |
#338 in HTTP客户端
1,371 每月下载量
用于 15 个Crate(直接使用2个)
745KB
17K SLoC
WebAssembly的H2
一个Tokio感知的HTTP/2客户端和服务器实现。编译为WebAssembly。
功能
非目标
该Crate的目的是仅实现HTTP/2规范。它不处理
- 管理TCP连接
- HTTP 1.0 升级
- TLS
- HTTP/2规范未描述的任何功能。
该Crate现在被 hyper 使用,它将提供所有这些功能。
用法
要使用 h2
,首先将以下内容添加到您的 Cargo.toml
[dependencies]
h2_wasi = "0.3"
接下来,将以下内容添加到您的Crate
extern crate h2;
use h2::server::Connection;
fn main() {
// ...
}
lib.rs
:
异步HTTP/2服务器和客户端实现。
该库实现了 HTTP/2 规范。实现是异步的,使用 futures 作为API的基础。实现也解耦了TCP或TLS的细节。用户必须自行处理ALPN和HTTP/1.1升级。
入门
将以下内容添加到您的 Cargo.toml
文件中
[dependencies]
h2 = "0.3"
布局
Crate被分为 client
和 server
模块。同时适用于客户端和服务器的基本类型位于Crate的根目录。
有关如何使用 h2
的更多详细信息,请参阅模块级别的文档。
握手
客户端和服务器都需要确保连接处于就绪状态,以便开始HTTP/2握手。这个库不提供进行此操作的功能。
有三种方法可以达到开始HTTP/2握手所需的状态。
- 打开一个HTTP/1.1连接并执行升级。
- 使用TLS打开连接并使用ALPN协商协议。
- 打开一个预先知道的连接,即客户端和服务器假设一旦打开连接,连接就立即准备好开始HTTP/2握手。
一旦连接准备好开始HTTP/2握手,可以将其传递给server::handshake
或client::handshake
。在此阶段,库将启动握手过程,该过程包括
- 客户端发送连接序言(一个预定义的24个八位字节序列)。
- 客户端和服务器发送一个SETTINGS帧。
有关更多详细信息,请参阅规范中的启动HTTP/2。
流量控制
流量控制是HTTP/2的一个基本功能。《code>h2库将流量控制暴露给用户。
HTTP/2客户端或服务器不能无限地向对等方发送数据。当一个流被启动时,客户端和服务器都会为该流提供一个初始窗口大小。窗口大小是端点可以向对等方发送的字节数。在任何时候,对等方都可以通过发送一个WINDOW_UPDATE
帧来增加这个窗口大小。一旦客户端或服务器已发送数据填满流的窗口,在该流上就不再发送进一步的数据,直到对等方增加窗口。
还有一个控制所有流上发送的数据的**连接级别**窗口。
通过FlowControl
管理传入数据的流量控制。通过SendStream
管理传出数据的流量控制。有关这两个类型的更多详细信息,请参阅结构级别文档。
依赖关系
~5–17MB
~148K SLoC