You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Python中获取HTTP_CF_IPCOUNTRY参数得到国家代码

Django 无法获取 HTTP_CF_IPCOUNTRY 头解决方案

排查解决步骤

  • 首先确认Cloudflare侧配置正确
    1. 登录Cloudflare站点控制台,进入「网络」设置页,确认「IP地理定位」开关处于开启状态
    2. 进入「规则」→「转换规则」→「修改请求头」,确认Add visitor location headers规则已启用,其中CF-IPCountry请求头处于开启状态

注意:如果你的服务没有接入Cloudflare代理,或者本地开发环境直接访问服务没有走Cloudflare链路,请求里自然不会携带该头,本地测试可以手动模拟请求头验证逻辑正确性。

  • 确认中间代理已透传该请求头
    如果你的Django服务前面部署了Nginx、Apache等反向代理,需要确认代理配置允许传递CF-IPCountry头,以Nginx为例,需要在站点配置的server/location块中添加:
proxy_set_header CF-IPCountry $http_cf_ipcountry;
  • 排查Django侧头接收逻辑
    Django默认会将请求头名称转为全大写、横杠替换为下划线、前缀加HTTP_后存入request.META,CF-IPCountry转换后确实是HTTP_CF_IPCOUNTRY,无需额外修改命名。如果仍然拿不到,可以先打印所有HTTP开头的元数据确认头是否存在:
def register(request):
    # 临时打印所有HTTP头排查
    for k, v in request.META.items():
        if k.startswith('HTTP_'):
            print(k, v)
    country_code = request.META.get('HTTP_CF_IPCOUNTRY', 'N/A').strip()
    print("THIs is ",country_code)
  • 本地开发临时验证方案
    本地开发环境没有走Cloudflare的话,可以在请求时手动携带该头测试逻辑,比如用curl请求:
    curl -H "CF-IPCountry: US" http://本地服务地址/register
    此时Django应该能正常拿到US作为国家代码。

内容的提问来源于stack exchange,提问作者Ahmed Yasin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:06