【发布时间】:2021-11-17 04:24:55
【问题描述】:
当我从在 localhost 上运行的网站发送 POST 时,得到一个指向 Lambda 的 API Gateway v2,该 Lambda 遇到了 CORS 问题。作为故障排除的一部分,我正在使用 curl 模拟预检请求。它没有按我的预期工作。
这是我在 API 网关中的 CORS 设置(仅限开发,而非 PRD):
aws apigatewayv2 get-api --api-id=redacted的CORS部分
"CorsConfiguration": {
"AllowCredentials": false,
"AllowHeaders": [
"content-type"
],
"AllowMethods": [
"HEAD",
"OPTIONS",
"POST"
],
"AllowOrigins": [
"*"
],
"MaxAge": 600
},
我正在使用这个脚本来查询它:
source='localhost'
dest='https://redacted.execute-api.us-west-2.amazonaws.com/redacted/'
verb='POST'
echo $source $dest $verb
curl -I -X OPTIONS \
-H "Origin: ${source}" \
-H "Access-Control-Request-Method: ${verb}" \
-H "Access-Control-Request-Headers: origin" \
"${dest}"
回复是:
HTTP/2 204
date: Thu, 23 Sep 2021 18:03:25 GMT
apigw-requestid: GIMpJhH4PHcES5g=
通过阅读 MDN 文档 here 和 this answer here,我希望 API 网关返回包含 Access-Control-Allow-Origin 的响应。但我什么也得不到。将源更改为包含 http:// 并没有改变结果(我没想到会这样,我认为 CORS 在这种情况下只关心域)。
请注意,很多答案都涉及“您忘记部署它”——但 API Gateway v2 默认为“自动部署”,并且此实例使用该默认值——每次更改时都会部署它。
注意:我在我的 lambda 中设置了 API 网关指向的 'Access-Control-Allow-Origin': '*' 和 "Content-Type": "application/json",,但我认为这还没有达到那么远,所以 lambda 现在不是问题的一部分。我是不是误会了?
如何使用 curl 检查 AWS API Gateway v2 上的 CORS?
我还应该为aws-api-gateway-v2 创建一个标签吗?它与 v1 有点不同,足以让 Terraform 使用不同的模块。
【问题讨论】:
-
这里有什么明显的错误吗? aws.amazon.com/premiumsupport/knowledge-center/… 如果你调用
aws apigatewayv2 get-api会发生什么——CorsConfiguration块看起来还可以吗? -
是的,我昨天发现了那篇故障排除文章,没有看到我遗漏的任何内容。将
aws apigatewayv2 get-api的结果添加到问题中。 -
还添加了更多标头并重新部署:“content-type”、“x-amz-date”、“x-amz-security-token”、“authorization”、“x- api-key","x-requested-with","accept","access-control-allow-methods", "access-control-allow-origin", "access-control-allow-headers" -- 没有变化
-
在黑暗中拍摄:尝试使用 localhost 以外的 Origin。
-
在 google.com 上尝试了一些关于 Origin 的变体,没有运气
标签: amazon-web-services cors aws-api-gateway