Rust Salvo如何启用HTTP2

我正在使用Rust的Salvo框架开发Web服务,想启用HTTP/2支持但不知道如何配置。官方文档中提到Salvo支持HTTP/2,但没有找到具体的示例代码。请问:

  1. 在Salvo中启用HTTP/2需要添加哪些依赖?
  2. 服务端的配置代码应该怎么写?
  3. 是否需要额外的证书或TLS配置?
  4. 有没有完整的示例可以参考?

希望有经验的开发者能分享一下具体的实现方法,最好能提供可运行的代码片段。谢谢!

2 回复

在Rust Salvo中启用HTTP2很简单。只需在Cargo.toml添加依赖:

salvo = { version = "0.41", features = ["http2"] }

然后启动服务时会自动使用HTTP2协议。


在Rust Salvo框架中启用HTTP2非常简单,只需在启动服务器时配置TLS即可,因为HTTP2在Salvo中需要基于TLS(HTTPS)运行。

以下是具体实现步骤:

  1. 添加依赖Cargo.toml 中添加 salvotokio-rustls 依赖:

    [dependencies]
    salvo = "0.54"
    tokio-rustls = "0.24"
    
  2. 创建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!"
    }
    
  3. 生成测试证书(如需开发测试)

    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协议。

回到顶部