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

会话启动发送数据时遇CORS错误,仅收Token响应且API已配置仍报错

解决CORS预检请求重定向错误

你的错误核心是预检OPTIONS请求被服务器重定向了,浏览器不允许预检请求返回重定向状态码(3xx),必须直接返回200/204确认跨域权限。以下是具体排查和修复步骤:

1. 修正请求URL的协议一致性

Heroku默认会强制将HTTP请求重定向到HTTPS,如果你前端用http://开头的URL发起请求,会触发自动重定向,导致预检请求失败。把请求URL改成HTTPS:

const submit = (e) => {
    axios.post("https://back-reserva.herokuapp.com/api/v1/users/login", e).then(res => console.log(res))
}

2. 排查服务器端的路由重定向规则

检查后端是否对/api/v1/users/login路径设置了重定向(比如强制添加末尾斜杠到/login/)。这种情况下OPTIONS请求会被重定向,直接触发CORS错误。

  • 修复路由配置,确保/login和/login/路径都能正常响应,或者统一路径格式。
  • 用curl测试预检请求,确认返回状态码:
    curl -X OPTIONS https://back-reserva.herokuapp.com/api/v1/users/login -H "Origin: http://localhost:3000" -v
    
    如果返回3xx状态码,说明确实存在重定向,需要调整服务器配置。

3. 确保CORS中间件正确处理预检请求

如果后端用Express框架的cors中间件,检查以下配置:

  • 确保CORS中间件在所有路由、重定向中间件之前加载,避免OPTIONS请求先被重定向逻辑拦截。
  • 配置optionsSuccessStatus: 204,让预检请求返回符合规范的204状态码:
    const cors = require('cors');
    app.use(cors({
      origin: 'http://localhost:3000', // 或根据需求设置允许的来源
      optionsSuccessStatus: 204
    }));
    
  • 确认Access-Control-Allow-Methods包含POST,Access-Control-Allow-Headers覆盖前端发送的所有请求头(比如Content-Type)。

4. 排除其他中间件干扰

检查是否有安全中间件(如helmet)、路由重写中间件在CORS中间件之前处理请求,导致预检请求被拦截或重定向。调整中间件顺序,让CORS中间件优先处理所有请求。

关于你提到的“仅能收到Token作为响应”:这属于正常业务逻辑,等CORS问题解决后,前端即可正常接收并处理该响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:20:35