在我的CloudFront原始请求中lambda@edge函数我想返回一个响应,该响应将在浏览器中设置cookie值并重定向到其他页面。我通过以下返回声明来完成:
return {
status: '302',
statusDescription: 'Found',
headers: {
location: [
{ key: 'Location', value: 'my.website.com' },
],
'set-cookie': [
{ key: 'Set-Cookie', value: 'key=value; Max-Age=600' },
]
}
};
不幸的是,CloudFront似乎删除/忽略了这个set-cookie
头,浏览器收到了一个没有它的响应。有趣的是,当放在CloudFront查看器请求函数中时,完全相同的代码也能工作。有没有一种方法可以使原始请求lambda在响应中保留set cookie头?
解决方案是一个缓存策略,Cookies - include specified cookies
选项已打开,并具有正确的白名单cookie名称。问题中的行为(如文件所述(是由以下因素引起的:
不要将cookie转发到您的源位置–CloudFront不会根据查看器发送的cookie缓存您的对象此外,CloudFront在将请求转发到您的源之前会删除Cookie,并在将响应返回给您的查看器之前从响应中删除Set Cookie标头
要防止使用白名单cookie名称进行缓存,请在响应中添加以下标头:Cache-Control: no-cache="Set-Cookie"
。