源请求 lambda 不会从源返回任何内容
Origin request lambda causes nothing to be returned from origin
我有一个以 s3 为源的云端分布。该存储桶仅包含一个 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,设置云端触发器,使缓存无效,然后尝试导航到我的测试 url 没有任何返回。屏幕一片空白:(
我的 lambda 函数有问题吗?如果我取消 lambda 源请求函数与云端分发的关联,然后使缓存无效,一切都会再次运行。
边缘 lambda 应该修改 request/response 对象和 return 它,而不是用一个新对象替换它,其余属性不存在。
像这样:
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);
};
我有一个以 s3 为源的云端分布。该存储桶仅包含一个 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,设置云端触发器,使缓存无效,然后尝试导航到我的测试 url 没有任何返回。屏幕一片空白:(
我的 lambda 函数有问题吗?如果我取消 lambda 源请求函数与云端分发的关联,然后使缓存无效,一切都会再次运行。
边缘 lambda 应该修改 request/response 对象和 return 它,而不是用一个新对象替换它,其余属性不存在。
像这样:
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);
};