Express是否默认禁用CORS?

问题描述 投票:3回答:2

我被要求确保我设置的新快速服务器强制执行跨源资源共享(CORS),除非请求来自特定URL。

我在这里找到了官方快递CORS中间件:https://github.com/expressjs/cors

如果我想为所有请求启用CORS,那么我只需要添加app.use(cors())

如果我只想允许特定网址,那么我可以将其传递给:

var corsOptions = {
  origin: 'http://example.com',
  optionsSuccessStatus: 200 
}

app.use(cors(corsOptions))

正确?

如果我想阻止所有源/ URL访问我服务器上的资源怎么办?

这只是Express的默认行为吗?

如果我跳过上述所有代码,那么我的服务器将受到保护以免受所有请求的影响?

如果我没有使用CORS中间件启用CORS,我如何能够使用邮递员来测试服务器请求?

谢谢!

node.js http express server cors
2个回答
3
投票

如果您未启用CORS中间件,则您的服务器响应将不包含CORS标头,并且浏览器将回退到标准same-origin policy(即,只有相同协议,域和端口上的脚本才能访问它)。

请注意,这些都不是在服务器端强制实施的--CORS只是向浏览器提供信息以允许它做出决策,并且没有什么能阻止浏览器实现简单地忽略CORS头或同源策略。例如,像Postman这样的HTTP客户端通常会完全忽略CORS,因为它与它们无关。


0
投票

只有当来自不同域的网页尝试访问您的资源时,CORS才会在浏览器中发挥作用。您可以手动检查ctx中的原始标头(不使用任何预构建的中间件)

 const origin = ctx.get('origin');
 //check if you want to allow this origin
 //if you want to allow it,
 ctx.set('Access-Control-Allow-Origin', origin);
 //else do not set the header or set it something else
 ctx.set('Access-Control-Allow-Origin', 'blahblah.com');

浏览器将首先向服务器发送OPTIONS请求以查看它是否允许当前源,如果不是,则浏览器不会继续发出原始请求。如果你查看https://github.com/expressjs/cors的来源,这大致就是它的作用。

如果您没有将这些标头作为响应,浏览器将回退到相同的原始策略。

© www.soinside.com 2019 - 2024. All rights reserved.