簡體   English   中英

與 API 網關相比,AWS Lambda function URL 返回不同的內容長度值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM