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 服务器
1,777 每月下载量
在 5 个包中使用了 (4 个直接使用)
40KB
448 行
axum-server-dual-protocol
描述
提供工具以托管接受 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-server
、axum
、tower
和hyper
,因此最低支持版本(MSRV)依赖于它们。在撰写本文时,最高的MSRV是axum
,版本为1.66。
变更日志
有关详细信息,请参阅变更日志文件。
许可证
根据您的选择,许可协议为以下之一:
- Apache许可证,版本2.0(《LICENSE-APACHE》或http://apache.ac.cn/licenses/LICENSE-2.0》)
- MIT许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT》)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的任何贡献,只要有意提交给作品,都应按上述方式双许可,不附加任何额外条款或条件。
依赖关系
~15–25MB
~446K SLoC