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

Django中CORS_ALLOWED_ORIGINS与CORS_ALLOW_ALL_ORIGINS配置无效求助

解决Django corsheaders配置后仍出现CORS错误的问题

以下是几个具体的排查和解决方向:

  • 修正中间件顺序
    确保corsheaders.middleware.CorsMiddleware是MIDDLEWARE列表的第一个,尤其要早于django.middleware.common.CommonMiddleware——CommonMiddleware会处理响应基础头,可能干扰CORS头的设置。正确顺序示例:

    MIDDLEWARE = [
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        # 其他中间件...
    ]
    
  • 清理冲突配置
    当设置CORS_ALLOW_ALL_ORIGINS = True时,CORS_ALLOWED_ORIGINS会被自动忽略,保留其中一项即可。建议删除CORS_ALLOWED_ORIGINS = ['*'],避免配置混淆。

  • 排查自定义代码干扰
    检查项目中的自定义中间件或视图装饰器,是否在响应返回前移除/覆盖了Access-Control-Allow-Origin头。可临时注释自定义中间件,测试问题是否消失。

  • 检查反向代理配置(如Nginx)
    如果Django部署在反向代理之后,需确保代理没有过滤CORS响应头。以Nginx为例,可在location块中添加配置:

    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
    
    if ($request_method = OPTIONS) {
        return 204;
    }
    

    或添加proxy_pass_header Access-Control-Allow-Origin;确保传递Django生成的CORS头。

  • 验证OPTIONS请求处理
    用浏览器开发者工具查看OPTIONS请求的响应,确认corsheaders是否正确返回CORS相关头。若OPTIONS请求无正确响应,需排查是否有自定义路由/中间件拦截了OPTIONS请求。

  • 清除浏览器缓存测试
    浏览器可能缓存旧响应头导致新配置不生效,切换到无痕模式重新发起请求验证。

  • 升级依赖版本
    确保django-cors-headers版本与当前Django兼容,建议升级到最新稳定版:

    pip install --upgrade django-cors-headers
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:40:34