我还需要使用 CORS 吗?

Posted

技术标签:

【中文标题】我还需要使用 CORS 吗?【英文标题】:Do I still need to use CORS? 【发布时间】:2021-10-24 08:55:20 【问题描述】:

我正在开发一个 web 应用程序的后端,我已经为任何路由设置了全局标头,如下所示

Router.js 文件

Router.use((req, res, next) => 
  res.header("Access-Control-Allow-Origin", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, Accept, Accept-Version,Set-Cookie, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-Response-Time, X-PINGOTHER, X-CSRF-Token,Authorization"
  );
  res.header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
  res.header("Content-Type", "application/json");
  res.header("Access-Control-Allow-Credentials", true);
  next();
);

服务器.js

//user defined middlewares
app.use("/",Router);

我是否需要再次设置 cors,因为我已经允许从任何来源访问?我还允许飞行前请求

【问题讨论】:

【参考方案1】:

只有在请求您的服务根 / 时才会发送这些标头。对于任何其他端点,例如/getsomething,都不会设置 CORS 标头。

如果您的服务器的用例只是 root 访问权限 - 或者您需要仅为 root 访问权限设置 CORS 标头,那么否 - 您无需执行任何操作。

但是,如果您有更多路由并且还需要它们与 CORS 兼容,那么您将不得不在所有路由之上使用通用中间件。

另外一点是,您的 CORS 中间件不应为 OPTIONS 预检请求发送任何其他内容。因此,最好在此处结束对 OPTIONS 请求的响应。

这是合并后的代码:

app.use((req, res, next) => 

  res.header("Access-Control-Allow-Origin", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, Accept, Accept-Version,Set-Cookie, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-Response-Time, X-PINGOTHER, X-CSRF-Token,Authorization"
  );
  res.header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
  res.header("Content-Type", "application/json");
  res.header("Access-Control-Allow-Credentials", true);

  if (req.method === 'OPTIONS') 
    res.status(200).send();
  else
    next();     
);

【讨论】:

感谢您的回答【参考方案2】:

如果您认为某个模块不符合您的要求,那么您将有三种选择:

    使用添加了额外要求的另一个模块 (DRY)。 尝试用你的一些额外代码来破解模块(尝试发现可以通过拉取请求更改主模块 或者只是为了暴露您的需求(DRY)而分叉新的。

【讨论】:

以上是关于我还需要使用 CORS 吗?的主要内容,如果未能解决你的问题,请参考以下文章

cors-anywhere.herokuapp.com 不工作 (503)。我还能尝试啥?

Paypal pro 我还需要使用 ipn 吗?

REST API 可以作为 CORS 问题的代理吗?

如何使用 angular.js-resource 启用 cors 请求

如果我使用基于令牌的身份验证,我还需要会话吗

React + Rails CORS 问题