Sanic:request.ip 和 request.remote_addr 的区别?
Sanic: difference between request.ip and request.remote_addr?
ip和Sanic请求的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
一些代理或负载平衡器可以隐藏原始客户端 ip。提到的 headers 可以存储这个值。
例如,请参阅 X-Forwarded-For header
的文档
request.ip
只显示直接连接Sanic的地址,而request.remote_addr
只显示代理给的远程地址(例如,如果你是running behind Nginx)。您需要根据您的应用程序是否 运行 在代理后面进行选择。要同时支持两者,请使用
user_ip = request.remote_addr or request.ip
ip和Sanic请求的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
一些代理或负载平衡器可以隐藏原始客户端 ip。提到的 headers 可以存储这个值。
例如,请参阅 X-Forwarded-For header
的文档request.ip
只显示直接连接Sanic的地址,而request.remote_addr
只显示代理给的远程地址(例如,如果你是running behind Nginx)。您需要根据您的应用程序是否 运行 在代理后面进行选择。要同时支持两者,请使用
user_ip = request.remote_addr or request.ip