Rust Salvo如何启用HTTP2
我正在使用Rust的Salvo框架开发Web服务,想启用HTTP/2支持但不知道如何配置。官方文档中提到Salvo支持HTTP/2,但没有找到具体的示例代码。请问:
- 在Salvo中启用HTTP/2需要添加哪些依赖?
- 服务端的配置代码应该怎么写?
- 是否需要额外的证书或TLS配置?
- 有没有完整的示例可以参考?
希望有经验的开发者能分享一下具体的实现方法,最好能提供可运行的代码片段。谢谢!
2 回复
在Rust Salvo中启用HTTP2很简单。只需在Cargo.toml添加依赖:
salvo = { version = "0.41", features = ["http2"] }
然后启动服务时会自动使用HTTP2协议。
在Rust Salvo框架中启用HTTP2非常简单,只需在启动服务器时配置TLS即可,因为HTTP2在Salvo中需要基于TLS(HTTPS)运行。
以下是具体实现步骤:
-
添加依赖 在
Cargo.toml
中添加salvo
和tokio-rustls
依赖:[dependencies] salvo = "0.54" tokio-rustls = "0.24"
-
创建TLS配置 使用
rustls
加载证书和私钥文件:use salvo::conn::rustls::RustlsConfig; use salvo::prelude::*; use std::path::PathBuf; #[tokio::main] async fn main() { // 1. 创建路由 let router = Router::new().get(hello); // 2. 配置TLS let config = RustlsConfig::new() .with_cert(include_bytes!("../certs/cert.pem").to_vec()) .with_key(include_bytes!("../certs/key.pem").to_vec()); // 3. 创建服务并启用HTTP2 let acceptor = TcpListener::new("0.0.0.0:443") .rustls(config) .bind() .await; // 4. 启动服务器 Server::new(acceptor).serve(router).await; } #[handler] async fn hello() -> &'static str { "Hello, HTTP2!" }
-
生成测试证书(如需开发测试)
openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365 -subj '/CN=localhost'
关键点说明:
- Salvo 的 HTTP2 支持通过
rustls
实现 - 必须使用有效的TLS证书(生产环境建议使用Let’s Encrypt等权威CA)
- 服务默认会同时支持HTTP/1.1和HTTP/2
这样配置后,你的Salvo应用就会在443端口上同时支持HTTPS和HTTP2协议。