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
相关产品推荐
相关产品推荐

