【问题标题】:Do I still need to use CORS?我还需要使用 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,因为我已经允许从任何来源访问?我还允许飞行前请求

【问题讨论】:

    标签: node.js rest express 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】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2012-08-25
      相关资源
      最近更新 更多