我有一個AWS lambda(用Ruby撰寫),它作為一個Web服務器在運行。 我通過一個應用負載均衡器訪問該lambda。 下面的代碼對html、javascript和css檔案都很好用。
{
statusCode: 200,
headers: {
'Content-Type'=> "text/html"
},
body: File.open("index.html").read
}
我添加了一些代碼,試圖從Lambda回傳二進制資料。
{
statusCode: 200,
headers: {
'Content-Type' => 'image/x-icon'isBase64Encoded: true,
body: Base64.encode64(IO.binread("favicon.ico")
}
如果我通過負載均衡器呼叫 lambda,我從負載均衡器收到一個 "502 Bad Gateway "回應。 負載平衡器的日志顯示如下。
"error_reason"/span>="LambdaInvalidResponse"/span>
如果我用aws lambda invoke從命令列呼叫lambda,我看到我的200回應和預期回應資料。
uj5u.com熱心網友回復:
使用Base64.strict_encode64而不是Base64.encode64。
為了找到問題所在,我啟動了一個Python lambda,讓它回傳完全相同的檔案。我驗證了它在ALB下作業,而Ruby版本則沒有。然后我用 cli 來呼叫每一個(棘手的二進制輸出),并進行比較。
Python 的默認 base64 編碼器輸出的整塊內容沒有換行,而 Ruby 的則嵌入了換行。
根據Ruby 檔案:
strict_encode64"符合RFC 4648的規定。沒有添加換行。"strict_encode64"符合RFC 4648。encode64"符合RFC 2045。每60個編碼的字符都會添加換行。"encode64"符合RFC 2045標準。
我猜ALB對其Base-64編碼非常挑剔!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/307613.html
標籤:
上一篇:阿里云輕量應用服務器價格收費標準
下一篇:NoMethodErrorinArticles#show(undefinedmethod`each'fornil:NilClass)[closed]
