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

配置django-cors-headers后仍遇403错误,非DRF项目该如何解决?

问题解答

首先明确:django-cors-headers并非仅适用于DRF,它是独立于DRF的Django通用中间件,所有Django项目都能正常使用。

你的403错误大概率来自以下几个配置问题:

1. 中间件顺序错误

corsheaders.middleware.CorsMiddleware的位置必须尽可能靠前,官方要求它要放在django.middleware.common.CommonMiddleware之前,且要在任何可能修改响应的中间件之前。你的配置里把它放在了CsrfViewMiddleware之后,这会导致CORS头无法正确生成。

正确的中间件顺序应该是:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'corsheaders.middleware.CorsMiddleware',  # 调整到这个位置
    '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',
]

2. CORS_ALLOWED_ORIGINS配置不匹配

如果你的前端运行在非http://localhost:8000的地址(比如常见的http://localhost:3000、http://127.0.0.1:5173等),当前的CORS_ALLOWED_ORIGINS列表没有包含前端的源地址,就会触发CORS相关的403。

请将前端实际的访问地址加入列表:

CORS_ALLOWED_ORIGINS = [
    'http://localhost:8000',
    'http://localhost:3000',  # 替换成你的前端实际地址
]

3. CSRF校验导致的403

如果你的请求是POST/PUT/DELETE等非GET请求,Django默认会强制校验CSRF Token,即使配置了CORS也不会绕过这个校验。如果前端没有正确传递CSRF Token,就会返回403。

解决方式:

  • 给不需要CSRF保护的视图添加@csrf_exempt装饰器(注意安全风险,仅适用于公开接口)
  • 配置CSRF_TRUSTED_ORIGINS,将前端源地址加入信任列表,同时前端正确获取并传递CSRF Token:
CSRF_TRUSTED_ORIGINS = [
    'http://localhost:3000',  # 替换成你的前端地址
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:26:03