POST,PUT和DELETE请求时出现CORS错误,但GET工作正常

时间:2020-03-31 09:15:27

标签: rest express http-headers cors

我目前正在使用MERN堆栈构建应用程序,但在访问REST api时遇到问题。它可以使用get请求获取数据,但是写入数据似乎失败。

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

x, y = 0, 0
x2, y2 = 1, 1
lst = [(x, y), (x2, y2)]
lst[0] = (lst[0][0], lst[0][1] + 32)

>> [(0, 32), (1, 1)]

我在前端使用axios进行那些api调用,并将withCredentials属性设置为true

一些需要注意的事情:

我正在使用cookie会话(在CORS之前声明配置(代码上方)声明)在我的域和子域中共享我的cookie

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();
});

这仅在我部署到GCP时失败,它在localhost上运行良好。

到目前为止我已经尝试过:

使用express cors中间件软件包并对其进行如下配置:

app.use(
  session({
    maxAge: 24 * 60 * 60 * 1000,
    keys: [process.env.SESSION_ENCRYPTION],
    domain: 'domain.io',
    signed: true,
    httpOnly: false,
    secure: false
  }));

看起来像这样的代码根本没有改变行为,因为无论放置该代码没有什么不同。但是,如果我保留该代码并在最顶部删除该代码,则整个api都会失败(甚至是GET请求)。

所以现在我对如何解决这个问题有些困惑。有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

几天后,头部被大量划伤,我找出了哪里出了问题。对于cors封装方法,origin属性不等于请求的标头origin

请求标头:

  • 来源:staging.domain.io

并且cors的origin属性是

  • 来源:staging.domain.io /

我要做的就是从cors的原点中删除斜线,哈哈。

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