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

Django跨域POST请求返回403 Referer校验失败问题咨询

问题根因
  • Django在处理HTTPS协议的POST请求时,CSRF中间件除了校验csrfmiddlewaretoken有效性外,会强制校验请求头的Referer值,要求其属于服务端可信源,该逻辑和corsheaders的跨域配置相互独立,你配置的CORS_ORIGIN_ALLOW_ALL = True仅能解决浏览器跨域资源拦截问题,不影响CSRF的Referer校验逻辑。
  • 你当前的配置中没有添加CSRF_TRUSTED_ORIGINS参数,前端所在域名https://anotherexample.com不在Django默认的可信源列表中,因此直接被CSRF中间件拦截返回403。
修复方案
  1. 推荐方案:配置可信CSRF源
    在settings.py中新增如下配置即可,把所有需要发起跨域POST请求的前端域名都加入列表:
CSRF_TRUSTED_ORIGINS = [
    "https://anotherexample.com",
    # 有其他前端域名也可以按格式加在这里
]

注意:列表内的域名必须带协议头(http/https),不能仅写域名

  1. 临时调试方案:给指定视图关闭CSRF校验
    如果是本地开发临时测试用,可以给接收请求的视图加csrf_exempt装饰器跳过CSRF校验,生产环境不推荐使用:
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse

@csrf_exempt
def your_request_view(request):
    # 你的业务逻辑
    return HttpResponse("ok")
  1. 极端场景方案:全局关闭CSRF校验
    如果你的服务是纯后端接口服务,没有前端页面也没有用户登录态的场景,可以直接在settings.py的MIDDLEWARE列表中删除django.middleware.csrf.CsrfViewMiddleware配置,全局关闭CSRF校验,该方案安全风险极高,非特殊场景不要使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:06:04