14个稳定版本
3.0.0 | 2020年10月29日 |
---|---|
2.3.3 | 2020年5月18日 |
2.3.1 | 2020年3月16日 |
1.1.1 | 2020年3月6日 |
#978 在 HTTP服务器 中
每月 93 次下载
20KB
169 行
actix-web-middleware-redirect-scheme
一个用于actix-web的中间件,将所有http
请求转发到https
,反之亦然。基于actix-web-middleware-redirect-https。
使用 HTTP -> HTTPS
# Cargo.toml
[dependencies]
actix-web-middleware-redirect-scheme = "3.0"
use actix_web::{App, web, HttpResponse};
use actix_web_middleware_redirect_scheme::RedirectSchemeBuilder;
App::new()
.wrap(RedirectSchemeBuilder::new().build())
.route("/", web::get().to(|| HttpResponse::Ok()
.content_type("text/plain")
.body("Always HTTPS!")));
您可以根据您的设置开启/关闭重定向
use actix_web::{App, web, HttpResponse};
use actix_web_middleware_redirect_scheme::RedirectSchemeBuilder;
let mut use_redir = true;
// ...
App::new()
.wrap(RedirectSchemeBuilder::new().enable(use_redir).build())
.route("/", web::get().to(|| HttpResponse::Ok()
.content_type("text/plain")
.body("Maybe HTTPS")));
默认情况下,中间件使用响应码 "301 永久移动",但您可以使用 "307 临时重定向"
use actix_web::{App, web, HttpResponse};
use actix_web_middleware_redirect_scheme::RedirectSchemeBuilder;
App::new()
.wrap(RedirectSchemeBuilder::new().temporary().build())
.route("/", web::get().to(|| HttpResponse::Ok()
.content_type("text/plain")
.body("Temporary HTTPS!")));
这相当于
RedirectSchemeBuilder::new().temporary()
和
RedirectSchemeBuilder::new().permanent(false)
默认情况下,中间件简单地替换URL的 scheme
为 https://
,但您可能需要更改URL的其他部分。例如,在开发中如果不使用默认端口(80和443),则需要指定它们的替换,如下所示
use actix_web::{App, web, HttpResponse};
use actix_web_middleware_redirect_scheme::RedirectSchemeBuilder;
App::new()
.wrap(RedirectSchemeBuilder::new().replacements(&[(":8080", ":8443")]).build())
.route("/", web::get().to(|| HttpResponse::Ok()
.content_type("text/plain")
.body("Always HTTPS on non-default ports!")));
使用 HTTPS -> HTTP
# Cargo.toml
[dependencies]
actix-web-middleware-redirect-scheme = "3.0"
use actix_web::{App, web, HttpResponse};
use actix_web_middleware_redirect_scheme::RedirectSchemeBuilder;
App::new()
.wrap(RedirectSchemeBuilder::new().https_to_http().build())
.route("/", web::get().to(|| HttpResponse::Ok()
.content_type("text/plain")
.body("Always HTTP!")));
这相当于
RedirectSchemeBuilder::new().https_to_http()
和
RedirectSchemeBuilder::new().http_to_https(false)
默认情况下,中间件简单地替换URL的 scheme
为 http://
,但您可能需要更改URL的其他部分。例如,在开发中如果不使用默认端口(80和443),则需要指定它们的替换,如下所示
use actix_web::{App, web, HttpResponse};
use actix_web_middleware_redirect_scheme::RedirectSchemeBuilder;
App::new()
.wrap(RedirectSchemeBuilder::new().https_to_http().replacements(&[(":8443", ":8080")]).build())
.route("/", web::get().to(|| HttpResponse::Ok()
.content_type("text/plain")
.body("Always HTTP on non-default ports!")));
依赖
~27MB
~574K SLoC