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

Django后端如何获取来自不同React前端子域的请求发起源子域名

Django跨子域名请求识别来源前端子域名解决方案

问题根源

你调用self.request.get_host()获取到的永远是backend的原因是:该方法读取的是HTTP请求的Host头,而浏览器发起跨子域名API请求时,Host头的值是请求目标(也就是后端服务backend.example.com)的域名,而非发起请求的前端域名。

可行解决方案

方案1:读取Origin请求头(推荐,无需前端修改)

浏览器发起跨域请求时,会自动携带Origin头,值为发起请求的前端页面完整源地址(比如https://first.example.com),直接解析该头即可拿到子域名标识。

Django视图代码示例

# 合法子域名白名单,避免恶意请求伪造头
ALLOWED_SUBDOMAINS = {"first", "second", "third"}

def get_request_subdomain(request):
    origin = request.META.get("HTTP_ORIGIN", "")
    if not origin:
        return None
    # 剥离协议前缀,提取域名部分
    domain = origin.replace("https://", "").replace("http://", "").split("/")[0]
    subdomain = domain.split(".")[0]
    return subdomain if subdomain in ALLOWED_SUBDOMAINS else None

# 视图中调用
subdomain = get_request_subdomain(self.request)

配套配置要求

  1. Django CORS配置中将所有前端子域名加入白名单:
# settings.py
CORS_ALLOWED_ORIGINS = [
    "https://first.example.com",
    "https://second.example.com",
    "https://third.example.com",
]
  1. 确保Nginx转发配置未屏蔽Origin头,Nginx location块参考配置如下:
location / {
    proxy_pass http://127.0.0.1:8000; # 替换为你的Gunicorn监听地址
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

方案2:前端主动携带自定义头(最稳定,不受浏览器隐私策略影响)

如果存在部分特殊请求无Origin头的场景,可以让前端在请求拦截器中统一注入自定义头标识子域名:

React前端代码示例(以Axios为例)

// Axios全局请求拦截器
axios.interceptors.request.use(config => {
    // 提取当前页面子域名
    const subdomain = window.location.host.split('.')[0]
    config.headers['X-Request-Subdomain'] = subdomain
    return config
})

Django视图读取代码

subdomain = self.request.META.get("HTTP_X_REQUEST_SUBDOMAIN", "")

方案3:读取Referer头(备选)

如果前两个方案都无法使用,可以读取Referer头作为备选,该头可能会被用户浏览器隐私设置禁用,准确率低于前两个方案:

referer = self.request.META.get("HTTP_REFERER", "")
if referer:
    domain = referer.replace("https://", "").replace("http://", "").split("/")[0]
    subdomain = domain.split(".")[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:36:02