You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CloudFront origin-request返回Set-Cookie被忽略怎么解决?

问题根因

origin-request 阶段的 Lambda@Edge 直接返回响应时,CloudFront 会将这个响应视为源站返回的响应,走默认缓存处理流程:默认会删除响应中的Set-Cookie头,避免该头被缓存后透传给其他无关用户。而 viewer-request 阶段返回的响应会直接发送给浏览器,不会经过缓存处理流程,因此Set-Cookie可以正常透传。

解决方案

方案1(推荐,无需修改CloudFront配置)

在你返回的302响应中增加Cache-Control头,明确告知CloudFront该响应不需要缓存,CloudFront 就不会主动移除Set-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' },
    ],
    'cache-control': [
      { key: 'Cache-Control', value: 'no-cache, no-store, must-revalidate' }
    ]
  }
};

302跳转本身属于临时重定向,通常不需要缓存,该方案不会影响业务逻辑,同时能直接解决问题。

方案2(适用需要缓存该响应的场景)

如果你的业务逻辑需要缓存这个302响应,同时要保留Set-Cookie头,需要调整CloudFront分发的缓存策略:

  • 进入对应CloudFront分发的「行为」设置页面,找到关联该Lambda@Edge的缓存行为,点击编辑
  • 如果你使用的是默认托管缓存策略,需要新建自定义缓存策略
  • 在自定义缓存策略的「响应头包含规则」中,添加Set-Cookie到允许透传的响应头列表中
  • 保存配置后等待CloudFront分发生效
    注意:如果缓存带Set-Cookie的响应,所有命中该缓存的用户都会被设置相同的Cookie,需提前确认业务逻辑允许该情况

内容的提问来源于stack exchange,提问作者K. Drab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:45:07