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

ReactJS对接Django API时GET请求出现CORS错误求助

问题排查与解决方案
  • CORS中间件顺序不正确
    Django中间件按顺序执行,corsheaders.middleware.CorsMiddleware必须放在中间件列表的最前端(至少在django.middleware.common.CommonMiddleware之前)。如果顺序靠后,GET请求的响应可能在CORS头添加前就被其他中间件处理,导致缺失关键头信息。POST请求因为处理逻辑不同可能不受影响。
    修复方式:修改settings.py的MIDDLEWARE配置:

    MIDDLEWARE = [
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware',
        # 其余中间件依次排列
    ]
    
  • GET请求触发Django错误响应
    如果GET请求的路由不存在、权限验证失败或参数有误,Django返回的404/403/400错误响应可能未经过CORS中间件处理,自然不会带上Access-Control-Allow-Origin头。而POST请求可能路由正确、权限通过,所以能正常返回CORS头。
    修复步骤:

    1. 直接用Postman或浏览器访问ngrok的GET接口,确认是否返回200状态码;
    2. 查看Django日志,定位GET请求的具体错误原因,修复路由、权限或参数问题。
  • 浏览器缓存了旧的无CORS头响应
    之前未配置CORS时发起的GET请求可能被浏览器缓存,即使现在配置正确,浏览器仍会优先读取缓存的无CORS头响应。POST请求默认不被缓存,因此不受影响。
    修复方式:

    1. 在Chrome开发者工具的「网络」面板勾选「禁用缓存」,重新发起请求;
    2. 用Ctrl+Shift+R强制刷新页面,清除相关缓存。
  • ALLOWED_HOSTS未包含ngrok域名
    如果Django的ALLOWED_HOSTS没有添加ngrok生成的随机域名,GET请求可能被Django拦截返回400错误,此时CORS中间件根本没机会处理响应。POST请求可能因请求体格式等原因暂时绕过拦截(这种情况少见,但需排查)。
    修复方式:测试阶段临时设置ALLOWED_HOSTS = ['*'],确认问题是否解决,之后再添加具体的ngrok域名。

  • HTTPS重定向导致CORS头丢失
    若本地后端用HTTP,ngrok转为HTTPS,且Django开启了SECURE_SSL_REDIRECT,GET请求会被重定向到HTTPS。重定向响应(301/302)通常不会携带CORS头,触发浏览器报错。POST请求一般不会被重定向,所以正常工作。
    修复方式:临时关闭SECURE_SSL_REDIRECT = False测试,或确保重定向响应能带上CORS头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:47:04