Rest POST、PUT和&;上的CORS错误;删除请求,但可以正常工作

Rest POST、PUT和&;上的CORS错误;删除请求,但可以正常工作,rest,express,http-headers,cors,Rest,Express,Http Headers,Cors,我目前正在使用MERN堆栈构建一个应用程序,访问RESTAPI时遇到问题。它能够使用get请求获取数据,但写入数据似乎失败了 在声明路由之前,我有以下代码块: app.use(function(req, res, next) { res.header('Access-Control-Allow-Origin', 'https://staging.domain.io'); res.header('Access-Control-Allow-Methods', 'GET, OPTION

我目前正在使用MERN堆栈构建一个应用程序,访问RESTAPI时遇到问题。它能够使用get请求获取数据,但写入数据似乎失败了

在声明路由之前,我有以下代码块:

app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Origin', 'https://staging.domain.io');
    res.header('Access-Control-Allow-Methods', 'GET, OPTIONS, PUT, POST, DELETE');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
    res.header('Access-Control-Allow-Credentials', true);
    next();
});
我在前端使用axios进行这些api调用,并将withCredentials属性设置为true

一些可能有用的注意事项: 我使用cookie会话(在CORS配置之前声明)在我的域和子域中共享我的cookie(以上代码)

这只是在我部署到GCP时失败的,它在本地主机上运行良好

到目前为止,我所尝试的: 使用express cors中间件包,配置如下:

app.use(
  cors({
    origin: 'https://staging.domain.io/',
    credentials: true
  })
);
app.options(
  "*",
  cors({
    origin: 'https://staging.domain.io/',
    credentials: true
  })
);
似乎这段代码根本没有改变行为,因为无论代码是否放置,都没有什么不同。但是,如果我保留代码并从最顶端删除代码,整个api都会失败(甚至获取请求)

所以现在我有点纠结于如何解决这个问题。有什么建议吗


谢谢!

经过几天的努力和大量的擦伤,我已经找到了错误的地方。对于cors包方法,origin属性不等于请求的头origin

请求标头:

  • 来源:staging.domain.io
cors的origin属性是

  • 来源:staging.domain.io/
我所要做的就是从cors的原点删除斜杠,哈哈


第一种方法(不使用cors)的问题仍然存在。

浏览器在devtools控制台中记录的确切错误消息是什么?@sideshowbarker我收到此错误(已删除api请求路由):CORS策略已阻止从源“”访问位于“…”的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:它没有HTTP ok状态。"您的评论中的错误消息表示服务器没有使用200 OK响应CORS预飞行,而是使用了一些HTTP错误代码。您可以使用浏览器devtools中的网络窗格查看服务器响应的HTTP错误代码。您还可以检查发送请求的API服务器上的服务器日志,并查看t服务器在响应返回的HTTP错误之前记录的消息。
app.use(
  cors({
    origin: 'https://staging.domain.io/',
    credentials: true
  })
);
app.options(
  "*",
  cors({
    origin: 'https://staging.domain.io/',
    credentials: true
  })
);