我被要求确保我设置的新快速服务器强制执行跨源资源共享(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,我如何使用邮递员来测试服务器请求?
谢谢!
答案 0 :(得分:3)
如果您未启用CORS中间件,您的服务器响应将不包含CORS标头,并且浏览器将回退到标准same-origin policy(即只有相同协议,域和端口上的脚本才能访问它)。
请注意,这些都不是在服务器端实施的,但是 - CORS只是向浏览器提供信息以允许它做出决策,并且没有什么能阻止浏览器实现简单地忽略CORS头或同源策略。例如,像Postman这样的HTTP客户端通常会完全忽略CORS,因为它与它们无关。
答案 1 :(得分:0)
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的来源,这大致就是它的作用。
如果您没有将这些标题作为回应,浏览器将返回到相同的原始政策。