【问题标题】:How to retrieve the IP address of the client from HttpRequest in actix-web?如何从actix-web中的HttpRequest检索客户端的IP地址?
【发布时间】:2021-04-08 21:31:40
【问题描述】:

是否可以从 HttpRequest 参数中获取 IP 地址?

这是我的代码:

#[get("/collect")]
pub async fn collect(req: HttpRequest) -> impl Responder {
    println!("collect {:?}", req);
    HttpResponse::Ok()
}
[dependencies]
actix-web = "3"

【问题讨论】:

    标签: rust actix-web


    【解决方案1】:

    如果服务前面没有代理,应该可以从请求peer_addr()中检索到。

    否则,您可以检索请求connection_info(),然后从那里检索realip_remote_addr()

    例子:

    #[get("/collect")]
    pub async fn collect(req: HttpRequest) -> impl Responder {
        if let Some(val) = req.peer_addr() {
            println!("Address {:?}", val.ip());
        };
        HttpResponse::Ok()
    }
    

    【讨论】:

    • 我应该打电话给 peer_addr(req) 吗?我是生锈初学者,这对我来说并不明显
    • @captain-yossarian 你通常只做req.peer_addr()
    • @JohnLedbetter 也许添加一个安全警告,说明realip_remote_addr() 返回的 IP 地址可能被欺骗。
    • @captain-yossarian 通常在真实(生产)环境中,客户端不会直接连接到您的 Web 服务器。相反,它们连接到一个叫做“反向代理”的东西,它只是一个不同的服务器,它接受请求并将它们转发到您构建的服务器(在这种情况下,您需要使用real_remote_addr)。反向代理的目的可能包括 1) 提高安全性(代理可以扫描或过滤请求),2) 负载平衡(在服务器的多个实例之间分配请求),或 3) 提供静态文件,如 CSS 样式表和图像.
    • @tedtanner 谢谢你的详尽解释
    猜你喜欢
    • 2018-08-21
    • 2011-09-09
    • 2012-11-29
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2013-04-20
    相关资源
    最近更新 更多