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

Django部署后CORS拦截XMLHttpRequest请求问题求助

修复Django DRF的CORS跨域错误

针对出现的No 'Access-Control-Allow-Origin' header错误,按以下步骤排查解决:

1. 修正中间件顺序(核心修复)

django-cors-headers要求CorsMiddleware必须放在尽可能靠前的位置,且必须在django.middleware.common.CommonMiddleware之前,同时SecurityMiddleware应当作为第一个中间件(处理安全相关头)。你当前的中间件顺序有误,调整为:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

错误的中间件顺序会导致CORS头无法被正确注入响应。

2. 明确指定允许的跨域源(替代全局允许,更安全)

尽管你设置了CORS_ORIGIN_ALLOW_ALL = True,但在HTTPS+带凭据的请求场景下,可能出现头未正确生成的问题。建议明确配置前端域名:

# 注释掉全局允许的配置
# CORS_ORIGIN_ALLOW_ALL = True

# 仅允许指定域名跨域
CORS_ORIGIN_WHITELIST = [
    'https://domain.com',
    # 若有本地开发环境,可添加:'http://localhost:3000'
]
CORS_ALLOW_CREDENTIALS = True

3. 配置HTTPS代理识别(反向代理部署场景)

如果后端部署在Nginx、Apache或云平台反向代理之后,需要让Django识别HTTPS请求,否则CORS头可能失效。添加以下配置:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

4. 更新django-cors-headers版本

确保使用最新版的依赖包,避免版本兼容问题:

pip install --upgrade django-cors-headers

5. 重启Django服务

所有配置修改后,必须重启后端服务才能生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:05:24