【发布时间】:2019-05-19 16:59:08
【问题描述】:
我想为多个来源实现 CORS,并且我知道我需要通过 lambda 函数来实现,因为我无法通过 MOCK 方法来实现
exports.handler = async (event) => {
const corsUrls = (process.env.CORS_URLS || '').split(',')
const requestOrigin = (event.headers && event.headers.origin) || ''
if (corsUrls.includes(requestOrigin)) {
return {
statusCode: 204,
headers: {
"Access-Control-Allow-Headers": 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Requested-With',
'Access-Control-Allow-Origin': requestOrigin,
'Access-Control-Allow-Methods': 'POST,DELETE,OPTIONS'
}
}
}
return {
statusCode: 403,
body: JSON.stringify({
status: 'Invalid CORS origin'
})
}
}
首先,上面看起来还可以吗?然后我从标题event.headers.origin 获取来源。但我发现我可以手动将该标题设置为“绕过”cors。是否有可靠的方法来检测源域?
【问题讨论】:
-
听起来推荐的方法是让您的服务器从客户端读取 Origin 标头,将其与您希望允许的域列表进行比较,如果匹配,则回显该值将
Origin标头作为响应中的Access-Control-Allow-Origin标头返回给客户端。 -
刚刚发布了一个答案。如果您提供有关您的目标的更多背景信息以及有关您期望
corsUrls等于什么以及您期望requestOrigin是什么的更多信息,我可以进一步完善我的答案,以针对您的确切情况提供更具体的细节。我很好奇你的目标和目标是什么。这将真正有助于确定适合您需求的解决方案。
标签: amazon-web-services lambda cors aws-api-gateway api-gateway