当前位置: 首页 > 知识库问答 >
问题:

自动气象站Lambda@edge. 访问源响应触发函数中的浏览器cookie

张嘉熙
2023-03-14

(我的设置:CloudFront S3原点)

大家好!

这就是我想做的:

第一步。根据查看器请求触发Lambda函数。获取具有用户首选语言的cookie(如果可用)(此cookie在用户选择站点语言时设置)。

第二步。在源响应上触发Lambda函数。如果响应为错误(例如404),则根据步骤1中的首选语言cookie向查看器返回错误页面。

我的问题是:如何使步骤1中获得的信息在步骤2中可用?一般来说,我如何处理基于用户请求和源响应信息的响应?如有任何建议,我将不胜感激。谢谢你!

共有1个答案

祁辰阳
2023-03-14

你不应该需要第一步。

将cookie列入白名单,以便在缓存行为中转发到源。这将导致CloudTop根据cookie的值缓存每个页面的单独副本。如果你的起源能够看到饼干,你无论如何都需要这个。

在Lambda@Edge中,有查看器侧触发器(在缓存前面)和源端触发器(在缓存后面)。

原点响应触发器可以看到从原点返回的响应,但也可以看到发送到原点的请求。

要求

Origin response–CloudFront转发到源站的请求,该请求可能已被由源站请求事件触发的Lambda函数修改

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html#lambda-事件结构响应

没有一种简单的方法将信息从查看器请求触发器发送到源响应触发器,因为它们位于缓存的另一侧,无法直接通信。

处理程序将被传递一个事件

你需要的一切都在事件中。记录[0]. cf

const cf = event.Records[0].cf;

响应在cf.response中,请求在cf.request中。

如果响应状态不是404,请跳出原始响应触发器,并允许CloudTop继续处理。

if(cf.response.status != "404')
{
  return callback(null, cf.response);
}

否则,从cf.request.headers.cookie中提取cookie(您需要在验证该数组存在后解析该数组——如果浏览器不提供cookie,则不会解析该数组),基于cookie生成您的自定义响应,并返回它。

有关如何返回生成的响应,请参见生成的响应-示例。

由于您是在源响应触发器中生成响应,因此它将根据错误缓存最小TTL(默认为5分钟)的值存储在缓存中。

 类似资料:
  • 问题内容: 我想知道是否存在某种特殊标记来启用特定表单的Chrome自动填充功能。我只发现了有关如何禁用它的问题,但是我想知道是否可以在html代码中添加某种标记,以便告诉浏览器“这是地址的输入”或“这是邮政编码”字段”以正确填写(假设用户激活了此功能)。 问题答案: 2017年更新: _看起来凯蒂(Katie)的答案比我的拥有更多最新信息。 未来的读者:请对她的回答投赞成票。 这是一个很大的问题

  • 我在动态数据库表上启用了流。修改项目时,将触发 lambda 函数。我认为我在 lambda 触发器端、权限端和 dynamodb 端都正确设置了所有内容。我还使用测试数据运行了我的lambda函数,它成功了。但是,当表中的项被修改时,触发器没有启动我的 lambda 函数。相反,我得到了以下错误: 批量:100最后处理结果:问题:函数调用失败 你知道调试这个的最佳方法是什么吗?我查看了Cloud

  • preview和response为什么不一样? 打印是这样 渲染是这样

  • 问题内容: 关于使用SQL Server 2008 R2,我有一个问题。 我最近在我的计算机上遇到问题,因此必须重新启动Windows,并且必须将一个用户的权限授予另一用户(使用属性中的安全功能)。最初授予权限时,它通过“访问被拒绝”消息。 经过大量研究,它停止产生此错误(我也需要授予权限的用户不可用),然后导致另一个问题发生,但这一次是在SQL Server中。它产生此消息; 数据库[dbNam

  • 我可以从AWS SDK创建lambda函数: 但是我如何指定这个函数应该在S3上传时触发呢?

  • 使用此代码为相同,但它是给无法访问的浏览器异常和不工作。