#https #https-server #axum-server #http #server-port #server #web

axum-server-dual-protocol

使用 axum-server 在同一端口上托管 HTTP 和 HTTPS 服务器

9 个版本 (破坏性更新)

0.7.0 2024年7月31日
0.6.0 2023年12月22日
0.5.2 2023年6月16日
0.4.0 2023年5月4日
0.1.0 2022年7月28日

#71 in HTTP 服务器

Download history 891/week @ 2024-05-02 410/week @ 2024-05-09 472/week @ 2024-05-16 775/week @ 2024-05-23 452/week @ 2024-05-30 604/week @ 2024-06-06 308/week @ 2024-06-13 422/week @ 2024-06-20 324/week @ 2024-06-27 297/week @ 2024-07-04 622/week @ 2024-07-11 421/week @ 2024-07-18 445/week @ 2024-07-25 421/week @ 2024-08-01 338/week @ 2024-08-08 526/week @ 2024-08-15

1,777 每月下载量
5 个包中使用了 (4 个直接使用)

MIT/Apache

40KB
448

axum-server-dual-protocol

Crates.io Version Live Build Status Docs.rs Documentation Main Documentation

描述

提供工具以托管接受 HTTP 和 HTTPS 协议的同一端口的 axum-server 服务器。请参阅 bind_dual_protocol()

此功能的常见用例是如果 HTTPS 服务器托管在非传统端口上,没有对应的 HTTP 端口。这可能会给尝试通过 HTTP 连接并收到连接重置错误的客户端带来问题。请参阅 ServerExt::set_upgrade()

用法

最简单的方法是使用 bind_dual_protocol()

let app = Router::new().route(
	"/",
	routing::get(|request: Request<Body>| async move {
		match request.extensions().get::<Protocol>().unwrap() {
			Protocol::Tls => "Hello, secure World!",
			Protocol::Plain => "Hello, insecure World!",
		}
	}),
);

// User-supplied certificate and private key.
let config = RustlsConfig::from_der(certificate, private_key).await?;

axum_server_dual_protocol::bind_dual_protocol(address, config)
	.serve(app.into_make_service())
	.await?;

现在我们有一个接受 HTTP 和 HTTPS 请求的服务器!现在我们可以使用 ServerExt::set_upgrade() 自动将传入的 HTTP 请求升级到 HTTPS,如下所示

use axum_server_dual_protocol::ServerExt;

axum_server_dual_protocol::bind_dual_protocol(address, config)
	.set_upgrade(true)
	.serve(app.into_make_service())
	.await?;

或者可以使用 UpgradeHttpLayer

let app = Router::new()
	.route("/", routing::get(|| async { "Hello, world!" }))
	.layer(UpgradeHttpLayer);

特性

默认

默认情况下,启用了 aws-lc-rs CryptoProvider

条件配置

docsrs

这需要 Rust Nightly 并增强文档。它必须与 RUSTDOCFLAGS 一起使用,而不是与 RUSTFLAGS 一起使用。

MSRV

由于这个库高度依赖于axum-serveraxumtowerhyper,因此最低支持版本(MSRV)依赖于它们。在撰写本文时,最高的MSRV是axum,版本为1.66。

变更日志

有关详细信息,请参阅变更日志文件。

许可证

根据您的选择,许可协议为以下之一:

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的任何贡献,只要有意提交给作品,都应按上述方式双许可,不附加任何额外条款或条件。

依赖关系

~15–25MB
~446K SLoC