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

Django服务通过主机IP访问API时出现CORS跨域请求失败问题

问题根因

你碰到的状态码为null的CORS拦截报错,本质是请求根本没拿到Django返回的合法跨域响应头,不是单一配置错误,是几个高频踩坑点叠加导致的:

  • 最核心的问题:Django默认启动的runserver服务只绑定127.0.0.1回环地址,不监听局域网网卡的请求,其他局域网设备发的请求根本到不了Django应用层,自然不会返回跨域相关响应头,浏览器直接判定请求失败。
  • CORS配置格式错误:CORS_ORIGIN_WHITELIST要求填写带协议、带端口的完整源地址,你之前填的纯IP、通配符*都不符合配置规范,在新版django-cors-headers中白名单不支持直接写通配符。
  • 部分配置逻辑混淆:空列表的ALLOWED_HOSTS在非DEBUG模式下会直接拒绝所有请求,配置错误时会直接断开连接,也不会返回跨域头。

你贴的MIDDLEWARE配置顺序是正确的,CorsMiddleware放在CommonMiddleware之前符合官方要求,这部分没有问题。

解决步骤

按顺序操作即可修复:

  1. 启动Django服务时绑定所有网卡地址,替换默认启动命令为:
    python manage.py runserver 0.0.0.0:8000
    
    启动后先在局域网其他设备的浏览器直接访问http://192.168.15.66:8000/api/service/,能看到接口返回内容就说明网络层已经打通。
  2. 修正django-cors-headers配置,打开settings.py调整配置:
    • 开发环境快速调试的话,直接开启全局跨域允许,不要在白名单中写*,新增配置:
      CORS_ALLOW_ALL_ORIGINS = True
      
    • 如果需要精确控制允许的源,关闭全局允许后,在白名单中填写前端服务的完整访问地址,比如React默认跑在3000端口的配置:
      CORS_ALLOW_ALL_ORIGINS = False
      CORS_ORIGIN_WHITELIST = [
          "http://localhost:3000",
          "http://192.168.15.66:3000"
      ]
      
      注意:白名单地址必须带http://或https://协议头,非80/443端口必须写明端口号,末尾不要加斜杠。
  3. 调整ALLOWED_HOSTS配置,开发环境直接设置为允许所有主机:
    ALLOWED_HOSTS = ["*"]
    
    生产部署时再替换为实际的服务IP或域名即可。
  4. 确认依赖包安装完整,执行以下命令避免漏装django-cors-headers:
    pip install django-cors-headers
    
排查校验

改完配置重启Django服务后再发请求,如果还是报错,打开浏览器开发者工具的网络面板,查看对应API请求的响应:

  • 如果完全没有响应内容,检查本机防火墙是否放开了8000端口,确认启动命令确实绑定了0.0.0.0
  • 如果有响应内容但响应头中没有Access-Control-Allow-Origin字段,检查settings.py的配置是否正确保存、有没有被其他配置覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:48:22