8 个版本

0.3.2 2022年6月22日
0.3.1 2022年6月13日
0.2.0 2022年5月31日
0.1.4 2022年5月31日

20#hyper-server

Download history 18/week @ 2024-03-12 4/week @ 2024-03-19 9/week @ 2024-03-26 44/week @ 2024-04-02 27/week @ 2024-04-09 10/week @ 2024-04-16 65/week @ 2024-04-23 22/week @ 2024-04-30 21/week @ 2024-05-07 89/week @ 2024-05-14 56/week @ 2024-05-21 88/week @ 2024-05-28 90/week @ 2024-06-04 34/week @ 2024-06-11 37/week @ 2024-06-18 5/week @ 2024-06-25

每月 185 次下载

LGPL-2.1 或更新

27KB
242 代码行

Simple Hyper Server TLS

LGPL 2.1 License Crate version Docs

该库简化了 Hyper 服务器(包括 ALPN(应用层协议协商)设置)的 TLS 配置。该库配置了适合客户端的 TLS 配置。配置包括 HTTP 协议选择设置(ALPN 机制设置),由于几乎所有客户端都可以选择例如 HTTP/2 协议。

使用此库需要选择合适的 TLS 实现,通过选择以下功能之一:

  • tls-rustls - RusTLS - 基于 tokio-rustls 的 Rust TLS 实现的本地实现,
  • tls-openssl - OpenSSL - 基于 OpenSSL 库和 openssl 的 TLS 实现。

对于由于某些问题(例如缺少某些由 ring crate 需要的 CPU 指令)无法处理 rustls 的系统,推荐使用 tls-openssl。对于其他系统,应首选 tls-rustls

默认启用三个 HTTP 协议版本(HTTP/1.0、HTTP/1.1、HTTP/2)。可以通过禁用默认功能并选择以下功能之一来仅选择一个版本:

  • hyper-h1 - 用于 HTTP/1.0 或 HTTP/1.1,
  • hyper-h2 - 用于 HTTP/2。

其他功能列表

  • hyper-full-server - 启用 hyper 服务器所有功能。

示例

最简单的使用方法是

use std::{convert::Infallible, net::SocketAddr};
use simple_hyper_server_tls::*;
use hyper::{Body, Request, Response, Server};
use hyper::service::{make_service_fn, service_fn};

async fn handle(_: Request<Body>) -> Result<Response<Body>, Infallible> {
    Ok(Response::new("Hello, World!".into()))
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));

    let make_svc = make_service_fn(|_conn| async {
        Ok::<_, Infallible>(service_fn(handle))
    });
    let mut server = hyper_from_pem_files("cert.pem", "key.pem", Protocols::ALL, &addr)?
            .serve(make_svc);
    while let Err(e) = (&mut server).await {
        eprintln!("server error: {}", e);
    }
    Ok(())
}

可以使用其他函数来定制 TLS 配置。

依赖项

~5–17MB
~220K SLoC