gpt4 book ai didi

amazon-web-services - AWS API Gateway - CORS "access-control-allow-origin"- 多个条目

转载 作者:行者123 更新时间:2023-12-02 23:53:02 25 4
gpt4 key购买 nike

我有一个连接到定义的 AWS API 网关的 AWS Lambda 实例。如果我启用 CORS 并为 access-control-allow-origin 提供 http://example.com 的定义,那么我就可以从 http://example.com。但是,如果我使用 https://example.com,它就不起作用。

那么在 AWS 中,如何在不使用通配符的情况下定义使用多个 access-control-allow-origin 值?我尝试使用类似 *.example.com 的内容,但这不起作用。

编辑:如果我使用 '*' 作为 API 网关上的值,但在我的 S3 存储桶上设置 CORS 规则,这安全吗?存储桶规则示例:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>https://example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>https://www.example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

最佳答案

如果您想启用多个源,这一直是 CORS 的烦恼。

其他系统(例如express/nginx等)中的常见解决方法是:

  • 检查浏览器发送的 Origin header
  • 根据来源白名单进行检查
  • 如果匹配,则返回传入的 Origin 作为 Access-Control-Allow-Origin header ,否则返回占位符(默认来源)

使用 AWS-Gateway 的自动连接 CORS 支持无法实现这一点,因为使用模拟集成,但如果您编写自己的代码来处理 OPTIONS 请求,则可以实现这一点。

下面是使用 lambda 代理集成编写的示例代码:

const allowedOrigins = [
"http://example.com",
"http://example.com:8080",
"https://example.com",
"https?://[a-z]*.?myapp.com",
"http://localhost:[0-9]*"
];

exports.handler = (event, context) => {
const origin = event.headers.Origin || event.headers.origin;
var goodOrigin = false;

if (origin) {
allowedOrigins.forEach( allowedOrigin => {
if (!goodOrigin && origin.match(allowedOrigin)) {
goodOrigin = true;
}
});
}

context.succeed({
headers: {
"Access-Control-Allow-Headers": "Accept,Accept-Language,Content-Language,Content-Type,Authorization,x-correlation-id",
"Access-Control-Expose-Headers": "x-my-header-out",
"Access-Control-Allow-Methods": "DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT",
"Access-Control-Allow-Origin": goodOrigin ? origin : allowedOrigins[0]
},
statusCode: 204
});
};

将其保存为 lambda 函数。要在 API-Gateway 中进行设置,请添加一个 OPTIONS 方法,并为 Integration Request 选择 Lambda FunctionUse Lambda Proxy Integration 打勾。

当然,这样做的缺点是您需要为 lambda 函数付费,并且调用 lambda 函数可能会比模拟集成额外增加 50 毫秒的延迟。

关于amazon-web-services - AWS API Gateway - CORS "access-control-allow-origin"- 多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39628640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com