#actix-web-middleware #actix-web #middleware #https #redirect #ssl #http-request

actix-web-middleware-redirect-scheme

一个用于actix-web的中间件,将所有http请求转发到https,反之亦然。基于actix-web-middleware-redirect-https。

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日

#978HTTP服务器

Download history 19/week @ 2024-02-19 30/week @ 2024-02-26 14/week @ 2024-03-04 15/week @ 2024-03-11 7/week @ 2024-03-18 10/week @ 2024-03-25 58/week @ 2024-04-01

每月 93 次下载

MIT 许可

20KB
169

actix-web-middleware-redirect-scheme

Build Status Latest Version Docs

一个用于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的 schemehttps://,但您可能需要更改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的 schemehttp://,但您可能需要更改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