Express是否默认禁用CORS?

时间:2018-01-03 12:20:34

标签: node.js http express server cors

我被要求确保我设置的新快速服务器强制执行跨源资源共享(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,我如何使用邮递员来测试服务器请求?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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的来源,这大致就是它的作用。

如果您没有将这些标题作为回应,浏览器将返回到相同的原始政策。