我还需要使用 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)。
尝试用你的一些额外代码来破解模块(
【讨论】:
以上是关于我还需要使用 CORS 吗?的主要内容,如果未能解决你的问题,请参考以下文章
cors-anywhere.herokuapp.com 不工作 (503)。我还能尝试啥?