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

CloudFront viewer-response事件修改响应头报只读头删除错误怎么解决?

错误原因

Lambda@Edge 针对viewer-response触发事件设定了只读响应头规则,Content-Length、Content-Encoding均属于不可删除、不可修改的只读头范畴。
你当前的代码直接构造了全新的headers对象,完全覆盖了原始响应中自带的只读头,CloudFront做结果校验时会判定你主动删除了只读头,因此抛出上述报错。

修复方案

不要直接创建全新的响应对象,而是在原始响应的基础上修改你需要自定义的字段,保留原有只读头即可。修改后的参考代码如下:

// 从事件中取出原始响应
const response = event.Records[0].cf.response;

// 修改状态码和描述
response.status = '302';
response.statusDescription = 'Found';

// 新增自定义头,原有头会被保留
response.headers['location'] = [{
  key: 'location',
  value: 'https://abc.test.io'
}];
response.headers['set-cookie'] = [{
  key: 'set-cookie',
  value: 'sessiontoken=' + sessionObjectData.session.sessionId + '; Secure; HttpOnly'
}];

callback(null, response);
补充说明
  • 如果你确实需要修改Content-Length、Content-Encoding这类头,需要将Lambda触发事件从viewer-response更换为origin-response,该触发场景下这类头允许修改。
  • 所有自定义的响应头key必须使用全小写格式,符合CloudFront的头字段规范,避免触发其他校验错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:51:02