首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回源请求lambda导致回源不返回

回源请求lambda导致回源不返回
EN

Stack Overflow用户
提问于 2021-09-12 17:10:19
回答 1查看 273关注 0票数 0

我有一个以s3为源的cloudfront发行版。存储桶只包含一个index.html文件。

cloudfront分发版具有转发Cloudfront- viewer -Country、Accept-Language和来自查看器请求的所有cookie的原始策略。

有了上面提到的,我就可以毫无问题地访问我的测试url了。一切都很好。

当我创建一个原始请求lambda@edge函数,该函数简单地读取CloudFront-Viewer-Country值并将其存储在cookie中时,如下所示:

代码语言:javascript
复制
'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发行版的关联,然后使缓存无效,那么一切都会再次正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-13 09:17:31

边缘lambda应该修改请求/响应对象并返回它,而不是在没有其他属性的情况下用新对象替换它。

如下所示:

代码语言:javascript
复制
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);
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69153634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档