gpt4 book ai didi

amazon-web-services - 主体被 CloudFront 拒绝的 AWS GET 请求

转载 作者:行者123 更新时间:2023-12-04 18:19:20 27 4
gpt4 key购买 nike

我正在使用 AWS SAM(Lambda 和 API 网关)构建 API,其契约(Contract)由第 3 方定义。

第 3 方使用主体中包含 JSON 的 GET 请求调用我的 API。但是,当请求发送到带有正文的 API 时,它会被 CloudFront 拒绝。

这是请求:

curl -X GET -H "Content-Type: application/json" --data '{"hello":"world"}' https://my-api.execute-api.us-east-2.amazonaws.com/Prod/my-api

这是回应:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD>
<BODY>
<H1>403 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Bad request.


<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: 1p0St_-e3noQL-2uMxeB_2I6lkMr1mg5afvxJRmVpCdnG67Vgnhj9w==
</PRE>
<ADDRESS></ADDRESS>
</BODY>
</HTML>

检查日志,请求从未命中 API 网关或 Lambda 函数。但是,如果我从请求中删除正文,那么它会命中 Lambda 函数,并且我会从 API 收到相应的错误消息(告诉调用者缺少预期的正文。)
curl -X GET -H "Content-Type: application/json" https://my-api.execute-api.us-east-2.amazonaws.com/Prod/my-api

我正在通过 SAM 模板使用 API Gateway 的基本配置。这是相关部分:
MyApiFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: bin/main.zip
Handler: main
Runtime: go1.x
Tracing: Active
Role: !Sub ${MyApiLambdaExecutorRole.Arn}
Events:
CatchAll:
Type: Api
Properties:
Path: /my-api
Method: GET

最佳答案

GET请求不能包含请求正文。尝试使用 POST反而。

如果您想在 GET 中发送有限的数据请求,可以使用查询参数。

您可以在 AWS Lambda Docs 中看到这是不可能的:

https://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-lambda-non-proxy-integration.html

This is because the GET request that you submitted cannot take a payload and fails the request validation.



您或许可以使用 EC2 实例或其他不使用 API Gateway 来处理请求的服务。

关于amazon-web-services - 主体被 CloudFront 拒绝的 AWS GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53786936/

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