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

CloudFront是否会删除Lambda@Edge添加的Server-Timing请求头?

问题原因

CloudFront启用安全请求头策略中的Server-Timing选项时,在缓存命中场景下会覆盖Lambda@Edge添加的自定义Server-Timing值。尽管Viewer Response触发器本应在缓存命中时重新执行并添加头,但安全策略的后置处理会强制替换该头内容,导致自定义值丢失。

解决方案

1. 禁用CloudFront安全请求头策略的Server-Timing选项

完全通过Lambda@Edge控制Server-Timing头的生成,避免CloudFront在后续流程中覆盖自定义内容。

2. 调整Lambda@Edge脚本(按需保留CloudFront原生指标)

如果需要同时包含CloudFront原生的Server-Timing指标和自定义内容,修改脚本合并两者,避免直接覆盖:

export async function viewerResponse(event) {
  const { response } = event.Records[0].cf;
  // 读取已有Server-Timing值(如CloudFront自动生成的)
  const existingTiming = response.headers['server-timing']?.[0]?.value || '';
  // 自定义计时内容
  const customTiming = 'something';
  // 合并值,用逗号分隔多指标
  const finalTiming = existingTiming ? `${existingTiming}, ${customTiming}` : customTiming;
  
  response.headers['server-timing'] = [{ key: 'Server-Timing', value: finalTiming }];
  return response;
}

3. 可选:配置缓存策略保留Server-Timing头

若自定义Server-Timing值不依赖请求参数,可在CloudFront缓存策略的缓存的响应头列表中添加Server-Timing,让CloudFront缓存该头内容,减少Lambda重复计算的开销。

验证步骤
  1. 重新部署修改后的Lambda@Edge并关联到CloudFront的Viewer Response触发器
  2. 关闭安全请求头策略中的Server-Timing开关
  3. 触发缓存命中请求(通过X-Cache: hit by cloudfront确认),检查响应头是否包含自定义的Server-Timing值

内容的提问来源于stack exchange,提问作者Seth Jeffery

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:21:31