重装Python后Django+Vue项目XMLHttpRequest出现CORS错误如何解决?
Access to XMLHttpRequest at 'localhost:8000/admin/login/?next=/api/report_builder/api/fields' (redirected from 'localhost:8000/api/report_builder/api/fields') from origin 'localhost:8080' has been blocked by CORS policy: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response.

可能成因
- Django跨域依赖缺失:重装Python后原虚拟环境的
django-cors-headers包未被重新安装,导致跨域配置完全失效 - 跨域配置不匹配:新安装的
django-cors-headers版本和原项目适配的版本不一致,旧版本默认允许Authorization头,新版本需要手动配置放行 - 中间件顺序错误:settings.py中
corsheaders.middleware.CorsMiddleware的位置不在中间件列表最前端,导致跨域头未被正确注入响应 - 认证失效触发重定向:请求携带的Authorization信息无效,Django将API请求重定向到admin登录页,而登录页的响应未携带跨域许可头,进一步触发CORS拦截
解决建议
- 修复依赖:激活项目对应的虚拟环境,执行
pip install django-cors-headers安装对应依赖,若有旧版本要求可指定版本号安装,比如pip install django-cors-headers==3.13.0 - 核对settings配置:
- 确认
INSTALLED_APPS列表中已添加corsheaders - 确认
MIDDLEWARE列表中corsheaders.middleware.CorsMiddleware放在所有中间件的最前位,优先级高于django.middleware.common.CommonMiddleware - 添加显式跨域配置:
# 放行前端地址 CORS_ALLOWED_ORIGINS = [ "http://localhost:8080", ] # 允许携带认证信息 CORS_ALLOW_CREDENTIALS = True # 放行Authorization请求头 CORS_ALLOW_HEADERS = [ "authorization", "content-type", ] # 开发阶段临时调试可开启以下配置,生产环境务必关闭 # CORS_ALLOW_ALL_ORIGINS = True
- 确认
- 修复重定向问题:检查前端携带的token是否有效、是否过期,后端API优先使用JWT等无会话认证方式,避免未认证时自动重定向到admin登录页
- 重启服务验证:修改完配置后完全重启Django后端服务,前端清理浏览器缓存后再发起请求测试。
内容的提问来源于stack exchange,提问作者Mahmoud khaywe
相关产品推荐
相关产品推荐

