Amazon web services 自动气象站Lambda@edge. 访问源响应触发函数中的浏览器cookie
(我的设置:CloudFront+S3原点) 大家好 这就是我想做的: 第一步。根据查看器请求触发Lambda函数。获取具有用户首选语言的cookie(如果可用)(此cookie在用户选择站点语言时设置) 第二步。在原点响应上触发Lambda函数。如果响应是错误(例如404),则根据步骤1中的首选语言cookie向查看器返回错误页面Amazon web services 自动气象站Lambda@edge. 访问源响应触发函数中的浏览器cookie,amazon-web-services,cookies,amazon-s3,header,aws-lambda,Amazon Web Services,Cookies,Amazon S3,Header,Aws Lambda,(我的设置:CloudFront+S3原点) 大家好 这就是我想做的: 第一步。根据查看器请求触发Lambda函数。获取具有用户首选语言的cookie(如果可用)(此cookie在用户选择站点语言时设置) 第二步。在原点响应上触发Lambda函数。如果响应是错误(例如404),则根据步骤1中的首选语言cookie向查看器返回错误页面 我的问题是:如何使步骤1中获得的信息在步骤2中可用?通常,如何根据用户请求和源响应信息处理响应?如有任何建议,我将不胜感激。谢谢大家! 你不需要第一步 将用于转发到
我的问题是:如何使步骤1中获得的信息在步骤2中可用?通常,如何根据用户请求和源响应信息处理响应?如有任何建议,我将不胜感激。谢谢大家! 你不需要第一步 将用于转发到缓存行为中的源的cookie列为白名单。这会导致CloudFront根据cookie的值缓存每个页面的单独副本。如果您的源站能够看到cookie,那么您无论如何都需要这个 在Lambda@Edge,有查看器端触发器(缓存前面)和源端触发器(缓存后面) 原点响应触发器可以看到从原点返回的响应,但也可以看到发送到原点的请求 请求 Origin response–CloudFront转发到源站的请求,该请求可能已被由源站请求事件触发的Lambda函数修改 没有一种简单的方法将信息从查看器请求触发器发送到源响应触发器,因为它们位于缓存的另一侧,无法直接通信 处理程序将被传递一个
事件
您需要的一切都在事件.Records[0].cf
中
const cf = event.Records[0].cf;
响应在cf.response
中,请求在cf.request
中
如果响应状态不是404,则退出原始响应触发器并允许CloudFront继续处理
if(cf.response.status != "404')
{
return callback(null, cf.response);
}
否则,请从cf.request.headers.cookie
中提取cookie(您需要在验证此数组是否存在后对其进行分析——如果浏览器未提供cookie,则此数组将不会存在),根据cookie生成自定义响应,然后返回它
有关如何返回生成的响应,请参见
由于您在源站响应触发器中生成响应,因此将根据的值(默认为5分钟)将其存储在缓存中。转发到源站的cookie白名单中是否包含语言cookie(在缓存行为设置中)?这将对解决方案的实施方式产生重大影响。