我有一个以s3为源的cloudfront发行版。存储桶只包含一个index.html文件。
cloudfront分发版具有转发Cloudfront- viewer -Country、Accept-Language和来自查看器请求的所有cookie的原始策略。
有了上面提到的,我就可以毫无问题地访问我的测试url了。一切都很好。
当我创建一个原始请求lambda@edge函数,该函数简单地读取CloudFront-Viewer-Country值并将其存储在cookie中时,如下所示:
'use strict';
/* This is an origin request function */
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
const headers = request.headers;
const countryCode = headers['cloudfront-viewer-country'] ? headers['cloudfront-viewer-country'][0].value : 'CA';
const response = {
status: '200',
headers: {
'set-cookie': [{
key: 'set-cookie',
value: 'locale='+countryCode,
}]
},
};
callback(null, response);
};然后,我部署了lambda,设置了cloudfront触发器,使缓存无效,然后尝试导航到我的测试url,没有返回任何内容。屏幕是空白的:(
我的lambda函数有问题吗?如果我取消lambda源请求函数与cloudfront发行版的关联,然后使缓存无效,那么一切都会再次正常工作。
发布于 2021-09-13 09:17:31
边缘lambda应该修改请求/响应对象并返回它,而不是在没有其他属性的情况下用新对象替换它。
如下所示:
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
const headers = request.headers;
const countryCode = headers['cloudfront-viewer-country'] ? headers['cloudfront-viewer-country'][0].value : 'CA';
headers['set-cookie'] = [
[{
key: 'set-cookie',
value: 'locale='+countryCode,
}]
];
callback(null, request);
};https://stackoverflow.com/questions/69153634
复制相似问题