Django CORS Headers不生效求助(常规方案尝试无效)
Django CORS Headers 不生效问题排查与解决
1. 修正配置语法错误
你settings.py里的CORS_ALLOW_ALL_ORIGINS: True用了冒号,Python变量赋值必须使用等号,改成:
CORS_ALLOW_ALL_ORIGINS = True
这是最容易忽略的低级错误,大概率是配置不生效的核心原因。
2. 确认中间件与ASGI配置
当前中间件顺序是正确的(CorsMiddleware放在最前),但因为你在用Django Channels,需要检查asgi.py是否正确挂载CORS中间件——Channels接管HTTP请求后,WSGI的中间件链不会自动继承,需手动配置:
# asgi.py 示例配置 import os from django.core.asgi import get_asgi_application from channels.routing import ProtocolTypeRouter from corsheaders.middleware import CorsMiddleware os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名.settings') django_asgi_app = get_asgi_application() application = ProtocolTypeRouter({ "http": CorsMiddleware(django_asgi_app), # 你的WebSocket路由配置 "websocket": ..., })
3. 如何查看实际响应头
- 浏览器F12打开「开发者工具」→「网络」标签,发送请求后找到对应条目,查看「响应头」区域
- 用curl命令直接测试:
curl -v -X POST http://你的接口地址
通过返回结果确认是否存在Access-Control-Allow-Origin字段。
4. 额外排查点
- 检查
django-cors-headers版本与Django版本兼容性(比如Django 4.x需搭配3.x以上的cors-headers) - 排除自定义视图逻辑干扰:写一个极简测试接口,验证CORS是否生效
@api_view(['GET']) def test_cors(request): return Response({"msg": "test"})
- 确认是否有反向代理(如Nginx)拦截请求并修改响应头,这种情况需在代理层同步配置CORS
内容的提问来源于stack exchange,提问作者samyarkhafan
相关产品推荐
相关产品推荐

