萨尼克:request.ip和request.remote_addr之间的区别



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

Sanic框架的源代码:

@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。提到的标头可以存储此值。

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

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

user_ip = request.remote_addr or request.ip

最新更新