![](/img/trans.png)
[英]How to get AWS API Gateway invoke URL in an AWS Lambda function?
[英]AWS Lambda function URL returns a different content-length value compared to API Gateway
我有一个 lambda 加载 S3 文件并将其作为 Base64 返回:
return {
"isBase64Encoded": True,
'statusCode': 200,
'body': b64encode(...).decode('utf-8'),
'headers': {
'Content-Type': 'application/octet-stream',
}
}
我创建了一个 API 网关,当我调用它时,我得到:
<Response [200]>
Content-Type application/octet-stream
Content-Length 998356
apparent_encoding ascii
但是调用 function URL 返回:
<Response [200]>
Content-Type application/octet-stream
Content-Length 748765
apparent_encoding None
正确的content-length
header 值是 API 网关返回的值,但是当使用 function URL 时 header 是不同的,即使它们都链接到相同的 Lambda 8835809888 Lambda 883580988
问题是什么?
当isBase64Encoded
设置为true
时, Lambda function 正在反转编码以获得原始数据。 这就是您获得较低content-length
值的原因。
但是, b64encode(...).decode('utf-8')
您的body
内容进行编码,然后将其解码回非 base64 编码的内容。 你实际上并没有返回 base64 编码的数据,但你指定你是。
将isBase64Encoded
设置为false
,您应该会收到正确的全部数据 - 至于为什么它与 API 网关一起工作,它可能会进行内部检查,意识到您实际上并没有返回 base-64 编码数据并按原样返回数据.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.