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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:45:55