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

Django中DELETE请求出现CORS方法未找到问题(预检请求异常)

Django DELETE请求CORS错误排查与解决方案
  • 先确认OPTIONS预检请求的真实响应头
    浏览器Network标签显示的可能是DELETE请求的头,而非预检的OPTIONS请求头。直接复制OPTIONS请求为cURL在终端执行,看实际返回的头:

    curl -X OPTIONS -H "Origin: 你的前端域名" -H "Access-Control-Request-Method: DELETE" 你的API地址 -v
    

    如果OPTIONS响应里确实没有Access-Control-Allow-Methods,说明corsheaders没正确处理预检。

  • 强制调整中间件顺序
    把corsheaders.middleware.CorsMiddleware放到所有中间件最前面,尤其是django.middleware.common.CommonMiddleware之前,settings.py里的配置要像这样:

    MIDDLEWARE = [
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware',
        # 其他中间件...
    ]
    

    中间件顺序错了,corsheaders根本没机会处理请求头。

  • 放弃用*,显式指定允许的方法
    部分浏览器对Access-Control-Allow-Methods: *的预检支持有问题,直接在settings.py里写死允许的方法:

    CORS_ALLOW_METHODS = [
        'DELETE',
        'GET',
        'OPTIONS',
        'PATCH',
        'POST',
        'PUT',
    ]
    
  • 检查反向代理是否篡改了响应头
    比如Nginx这类代理,如果自己加了Access-Control-Allow-Methods头,会和Django返回的头冲突。确保代理配置里不手动添加CORS相关头,完全让Django处理。示例Nginx配置:

    proxy_pass http://你的Django后端地址;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # 不要加任何Access-Control相关的set_header配置
    
  • 排查自定义中间件
    如果项目里有自定义中间件,检查是否在process_request里提前返回了OPTIONS请求的响应,导致corsheaders没机会处理。确保OPTIONS请求能完整走到corsheaders中间件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:36:03