【问题标题】:Sanic: difference between request.ip and request.remote_addr?Sanic:request.ip 和 request.remote_addr 之间的区别?
【发布时间】:2020-07-27 04:21:03
【问题描述】:

Sanic 请求的 ip 和 remote_addr 属性有什么区别?

Sanic framework的源码:

@property
def ip(self):
    """
    :return: peer ip of the socket
    """
    if not hasattr(self, "_socket"):
        self._get_address()
    return self._ip


@property
def remote_addr(self):
    """Attempt to return the original client ip based on `forwarded`,
    `x-forwarded-for` or `x-real-ip`. If HTTP headers are unavailable or
    untrusted, returns an empty string.

    :return: original client ip.
    """
    if not hasattr(self, "_remote_addr"):
        self._remote_addr = self.forwarded.get("for", "")
    return self._remote_addr

【问题讨论】:

    标签: python-3.x http request ip sanic


    【解决方案1】:

    某些代理或负载平衡器可能会隐藏原始客户端 IP。提到的标头可以存储此值。

    例如,请参阅X-Forwarded-For 标头的文档

    【讨论】:

      【解决方案2】:

      request.ip 只显示直接连接 Sanic 的地址,而request.remote_addr 只显示代理提供的远程地址(例如,如果您是 running behind Nginx)。您需要根据您的应用程序是否在代理后面运行来选择一个。要同时支持两者,请使用

      user_ip = request.remote_addr or request.ip
      

      【讨论】:

        猜你喜欢
        • 2011-05-04
        • 1970-01-01
        • 2021-12-25
        • 2020-05-10
        • 2014-09-20
        • 2010-10-28
        • 2015-10-04
        • 2012-08-12
        • 2011-02-18
        相关资源
        最近更新 更多