我已经设置了一个API网关,通过OpenAPI规范和Lambda通过CloudFormation进行集成。如果我调用我的POST、补丁或DELETE方法(甚至选项!),它们成功地到达了我的lambda函数并按预期返回。但是,一旦我使用GET或HEAD方法调用我的一个端点--一个存在的GET端点,或者一个不存在的GET方法(如/foobar ),我所得到的就是一个HTTP403,它包含了HTML内容,而不是JSON:
<!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.
We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
<BR clear="all">
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: ju-yNp9QlyjqrAFHC3xR9DkO0N9DaPK2BcVQlpeswPMEerwErwdDUw==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>
标头只包括X-Cache: Error from Cloudfront
,没有一个常规的API网关报头,例如x-amzn-ErrorType
。我相信这个请求甚至没有到达我的API网关。
我正在调用我的xxxxxxxx.execute-api.eu-west-1.amazonaws.com
URL,所以CloudFront不是手动放在前面的,但是我猜API网关本身使用CloudFront。由于某种原因,我的GET端点是否启用了缓存?在我的API网关阶段params中,"API缓存“被禁用,并且我找不到任何与CloudFront或缓存有关的远程内容。
我的API及其集成如下所示:
/mypath:
get:
x-amazon-apigateway-integration:
type: aws_proxy
passthroughBehavior: when_no_match
httpMethod: POST
uri: arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:xxxxxxxxx:function:${stageVariables.LambdaName}/invocations
requestParameters: {}
responses:
'200':
statusCode: '200'
'400':
statusCode: '400'
这种集成适用于所有非GET请求,但对所有GET请求都会导致这个奇怪的错误。我已经准备好了DEFAULT_4XX响应,这也适用于所有其他方法,比如POST /什么--不存在--这些方法使我的自定义响应变得很好。我没有在任何地方配置HTML内容,那么为什么会发生这种情况呢?
发布于 2022-10-20 20:32:15
结果发现,只有当我尝试使用请求体进行GET时,才会发生这种情况。我在使用邮递员,偶然地,我把我的请求身体从以前的邮件请求。当我移除身体时,GET请求就能工作了。
我还没有找到任何方法来阻止这种奇怪的“身体不允许有GET或HEAD”的处理。
https://stackoverflow.com/questions/74146005
复制相似问题