第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調(diào)用源自瀏覽器AWS開發(fā)工具包時,AWS Lambda設(shè)置響應(yīng)標(biāo)頭

調(diào)用源自瀏覽器AWS開發(fā)工具包時,AWS Lambda設(shè)置響應(yīng)標(biāo)頭

躍然一笑 2021-04-27 17:18:44
通過帶有AWS Lambda代理集成的API Gateway設(shè)置響應(yīng)標(biāo)頭很簡單,如下所示:import zlib from 'zlib';exports.handler = async (event, context, callback) => {  const body = zlib.gzipSync(JSON.stringify({ data: 'mock' }));  const headers = {};  headers['Content-Type'] = 'application/json';  headers['Content-Encoding'] = 'gzip';  const responseObject = {    statusCode: 200,    headers,    body: body.toString('base64'),    isBase64Encoded: true  };  return callback(null, responseObject);}一切都按預(yù)期方式以壓縮方式返回。因為我們設(shè)置了內(nèi)容編碼,所以瀏覽器解壓縮了響應(yīng)。問題是,使用AWS開發(fā)工具包JS直接從瀏覽器調(diào)用Lambda函數(shù)時,如何設(shè)置標(biāo)頭?API Gateway是一項服務(wù),該服務(wù)實現(xiàn)了先前設(shè)置中的標(biāo)頭,而沒有在AWS Lambda標(biāo)頭前面放置API Gateway,而是將標(biāo)頭設(shè)置為:access-control-allow-origin: *access-control-expose-headers: x-amzn-RequestId,x-amzn-ErrorType,x-amzn-ErrorMessage,Date,x-amz-log-result,x-amz-function-errorcontent-length: 1242content-type: application/jsondate: Fri, 26 Apr 2019 00:36:35 GMTstatus: 200x-amz-executed-version: $LATESTx-amzn-remapped-content-length: 0x-amzn-requestid: <REDACTED>x-amzn-trace-id: <REDACTED>AWS開發(fā)工具包JS瀏覽器調(diào)用代碼如下所示:import AWS from 'aws-sdk';AWS.config.region = 'us-east-1'; // RegionAWS.config.credentials = new AWS.CognitoIdentityCredentials({    IdentityPoolId: '<SOME IDENTITY>',});const AWSLambda = new AWS.Lambda({region: REGION, apiVersion: '2015-03-31'});const parameters = {    FunctionName : 'MyFunctionName',    InvocationType : 'RequestResponse',    LogType : 'None',    Payload: JSON.stringify({msg: 'hello lambda'})};(async () => {  const response = await AWSLambda.invoke(shopParameters).promise();  console.log(response);})();返回的響應(yīng)是上面的響應(yīng)對象,是帶有通用標(biāo)頭的字符串。瀏覽器不會解壓縮壓縮的內(nèi)容,大概是因為未設(shè)置內(nèi)容編碼標(biāo)頭。從瀏覽器調(diào)用時,AWS Lambda會將整個Lambda響應(yīng)對象視為響應(yīng),并且不會執(zhí)行API Gateway發(fā)生的任何轉(zhuǎn)換。例如,API網(wǎng)關(guān)將選擇響應(yīng)對象結(jié)構(gòu)并將響應(yīng)對象標(biāo)頭映射到響應(yīng),然后再發(fā)送給客戶端。沒有API Gateway,沒有辦法設(shè)置AWS Lambda標(biāo)頭嗎?或者是使用諸如https://github.com/nodeca/pako之類的東西在客戶端上手動解壓縮gzip內(nèi)容的唯一選項(嘆氣)。不使用API網(wǎng)關(guān)的想法來自此處找到的AWS文檔,例如避免API網(wǎng)關(guān)成本:https : //docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/browser-invoke-lambda -function-example.html任何指導(dǎo),專業(yè)知識,思想都將不勝感激!
查看完整描述

2 回答

?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗 獲得超16個贊

不,如果沒有Lambda服務(wù)API(通常是API網(wǎng)關(guān))之前的任何東西,就無法做到這一點。

const responseObject實際上是使用API網(wǎng)關(guān)指定的格式創(chuàng)建響應(yīng)的-Lambda服務(wù)不對響應(yīng)進(jìn)行任何解釋。這就是為什么它對響應(yīng)中的標(biāo)頭沒有影響,以及為什么base64保持未翻譯的原因-整個結(jié)構(gòu)是特定于API網(wǎng)關(guān)的。Lambda只是返回JSON。

如果響應(yīng)足夠小,那么“某物”可能是應(yīng)用程序負(fù)載平衡器,盡管身份驗證會有所不同,但它可能與Cognito一起使用可能不太容易,也可能不夠容易。它使用與API網(wǎng)關(guān)基本相同的響應(yīng)格式,并且平衡器在將base64返回給瀏覽器之前對其進(jìn)行解碼。

您還可以使用CloudFront的Lambda @ Edge功能通過HTTP(S)調(diào)用Lambda函數(shù),并設(shè)置自定義標(biāo)頭并自動解碼base64,但是此服務(wù)沒有內(nèi)置的Cognito集成,并且與全功能明顯不同。 Lambda服務(wù),僅支持Node.js,并在離瀏覽器最近的AWS區(qū)域(而不是在創(chuàng)建該區(qū)域的區(qū)域)運行Lambda函數(shù),以提高全局性能。Lambda @ Edge還期望使用不同的輸出格式,這是一種比API Gateway期望的響應(yīng)結(jié)構(gòu)更精心設(shè)計的設(shè)計,因此也不能互換。


查看完整回答
反對 回復(fù) 2021-05-13
  • 2 回答
  • 0 關(guān)注
  • 242 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號