gpt4 book ai didi

amazon-web-services - 我在 Lambda@Edge 源请求函数中替换正文时出现验证错误

转载 作者:行者123 更新时间:2023-12-04 08:03:26 24 4
gpt4 key购买 nike

我在提供 HLS 视频的 s3 存储桶前面有 Cloudfront。我正在尝试动态修改 list 文件以向其中的段添加身份验证 token 。

我真正想做的是修改我在查看器响应函数中发送回客户端的正文,但由于这是不可能的,我尝试使用源请求函数从 S3 手动获取对象,修改它,并返回一个带有新正文的 Cloudfront 请求。我收到“Lambda 函数结果验证失败:主体不是字符串、不是对象或超出最大大小”的 503 错误

我的 body 小于 8kb(1MB 是文档中的限制)。据我所知,我生成的 cloudfront 请求对象看起来不错,base64 数据解码为我想要的。我也尝试过使用文本而不是 base64。我在 Cloudfront 中启用了“包含正文”。

const fs = require('fs');
const querystring = require('querystring');
const AWS = require('aws-sdk');
const S3 = new AWS.S3();

exports.handler = async (event) => {
const cfrequest = event.Records[0].cf.request;
const queryString = querystring.parse(event.Records[0].cf.request.querystring);
const jwtToken = queryString.token;

if (cfrequest.uri.match(/\.m3u8?$/mi)) {

const s3Response = await (new Promise((resolve, reject) => {
S3.getObject({
Bucket: 'bucket',
Key: cfrequest.uri.substring(1)
}, (err, data) => {
if (err) {
reject(err)
} else {
resolve(data);
}
});
}));

const manifestFile = s3Response.Body.toString('utf8');
const newManifest = manifestFile.replace(/^((\S+)\.(m3u8|ts|vtt))$/gmi, (_, url) => `${url}?token=${jwtToken}`);
const base64NewManifest = Buffer.from(newManifest, 'utf8').toString('base64');

const tokenizedCfRequest = {
...cfrequest,
body: {
action: 'replace',
data: base64NewManifest,
encoding: 'base64'
}
};

return tokenizedCfRequest;
}

return cfrequest;
}

最佳答案

如果要生成自己的响应,则需要使用查看器请求或源请求事件并返回如下响应:

exports.handler = async (event) => {
const cfRequest = event.Records[0].cf.request;
const queryString = querystring.parse(event.Records[0].cf.request.querystring);
const jwtToken = queryString.token;

if (cfrequest.uri.match(/\.m3u8?$/mi)) {

// ... your code here ...

const response = {
status: 200, // only mandatory field
body: base64NewManifest,
bodyEncoding: 'base64',
};
return response;
}

// Return original request if no uri match
return cfRequest;
}

另见 Generating HTTP Responses in Request Triggers .

关于amazon-web-services - 我在 Lambda@Edge 源请求函数中替换正文时出现验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56032865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com