aws-api-gateway - 在 SAM 声明中如何防止 APIGateway 的 CORS 覆盖?
问题描述
我想使用 lambda 处理 CORS OPTIONS 请求,以便允许多个来源。这是我的 APIGateway SAM 声明的起点:
TESTAPI:
Type: AWS::Serverless::Api
Properties:
Name: TEST_API
Cors:
AllowOrigin: "'https://example.com'" # only one origin allowed
AllowCredentials: true
AllowMethods: "'*'"
AllowHeaders: "'*'"
Auth:
Authorizers:
MyAuthorizer:
UserPoolArn: arn:aws:cognito-idp:... # my user pool
为了简单起见,每个 lambda 都被声明为处理任何请求,如下所示:
TESTEndpoint:
Type: AWS::Serverless::Function
Properties:
FunctionName: TEST_endpoint
Handler: package/module.handler_any
Events:
HttpAny:
Type: Api
Properties:
Path: '/path/endpoint'
Method: ANY
RestApiId: !Ref TESTAPI
Auth:
Authorizer: MyAuthorizer
当我使用 curl 从端点请求 OPTIONS 时,将调用处理 lambda。
但是,当我实际发出跨源请求时,上面声明的 CORS 标头用于 OPTIONS 响应,而不是我的 lambda 返回的标头。同样,如果我不声明 CORS 标头,则 OPTIONS 响应中不会返回 CORS 标头,因此请求失败。
问题:如何防止 APIGateway 覆盖我的 CORS 标头?
更新 2021-7-27
这个问题仅与 OPTIONS 方法有关。对于所有其他方法(例如 GET),标头包含在 Lambda 定义的范围内,因此允许 CORS 用于多个来源。
解决方案
推荐阅读
- vuejs3 - 在 vue 3 类组件单元测试中未定义 store
- node.js - 关于快速会话在 AWS 弹性 beantalk 中不起作用的问题
- javascript - 在 sweetalert 中选择取消后的单选按钮选择
- c++ - 在 C++ 中限制用于序列化的字符串的大小
- angular - 如何在 Angular 11 中使用复选框删除多行
- javascript - discord.api.applications() 抛出 UnhandledPromiseRejectionWarning
- machine-learning - 为什么我的解释方差是回归模型的负值?
- duplicates - 有没有办法减少此代码删除部分重复项的运行时间?
- c++ - C ++ 17 unique_ptr lambda按值捕获可以,但不能按引用
- javascript - 带有 FP 类型的 Ramda