![](/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.