- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Django 项目,用户将根据他们的位置获得自定义信息。为了做到这一点,我使用他们的 IP 地址来识别他们的国家。为了保持数据库中的数据一致,我需要确保我有一个准确的 IP。
我知道使用 META 通常使用客户端浏览器发送的 header ,但我不知道这是否适用于 REMOTE_ADDR
属性。
TLDR:HttpRequest.get_host()
和有什么区别和 HttpRequest.META['REMOTE_ADDR']
?
最佳答案
HttpRequest.get_host()
的区别和 HttpRequest.META['REMOTE_ADDR']
是第一个按照优先级递减的顺序检查以下 header 中的 IP:
HTTP_X_FORWARDED_HOST
HTTP_HOST
SERVER_NAME combined with SERVER_PORT
REMOTE_ADDR
.
get_host()
将为您提供托管应用程序的服务器的名称,而不是客户端的 IP。
get_host()
的实现:
def get_host(self):
"""Returns the HTTP host using the environment or request headers."""
# We try three options, in order of decreasing preference.
if settings.USE_X_FORWARDED_HOST and (
'HTTP_X_FORWARDED_HOST' in self.META):
host = self.META['HTTP_X_FORWARDED_HOST']
elif 'HTTP_HOST' in self.META:
host = self.META['HTTP_HOST']
else:
# Reconstruct the host using the algorithm from PEP 333.
host = self.META['SERVER_NAME']
server_port = str(self.META['SERVER_PORT'])
if server_port != ('443' if self.is_secure() else '80'):
host = '%s:%s' % (host, server_port)
allowed_hosts = ['*'] if settings.DEBUG else settings.ALLOWED_HOSTS
domain, port = split_domain_port(host)
if domain and validate_host(domain, allowed_hosts):
return host
else:
msg = "Invalid HTTP_HOST header: %r." % host
if domain:
msg += "You may need to add %r to ALLOWED_HOSTS." % domain
raise DisallowedHost(msg)
REMOTE_ADDR
HTTP_X_FORWARDED_FOR
HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
可以是逗号分隔的 IP 列表 HTTP_X_FORWARDED
HTTP_X_CLUSTER_CLIENT_IP
HTTP_FORWARDED_FOR
HTTP_FORWARDED
关于django - 出于安全原因,get_host() vs META ['REMOTE_ADDR' ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17635471/
我可以通过调用 get_host() 来获取 IP 的主机,但前提是我为一个 IP 执行此操作。当我在它上面放置一个 for 循环来检查 IP 列表时,它失败并出现错误:“‘some.ip’的 Who
我正在开发一个 Django 项目,用户将根据他们的位置获得自定义信息。为了做到这一点,我使用他们的 IP 地址来识别他们的国家。为了保持数据库中的数据一致,我需要确保我有一个准确的 IP。 我知道使
我正在创建多站点平台。任何人都可以使用我的平台制作简单的网站。我计划使用 django multidb 支持。一个站点一个数据库。我需要根据 request.get_host() 更改数据库设置。我认
我刚刚升级到 Django 1.5,当我尝试访问页面时,出现以下错误: ImproperlyConfigured: Error importing middleware app.middleware:
我是一名优秀的程序员,十分优秀!