如何在AWS CloudFront中阻止x-http-method-override请求头?
如何在CloudFront中阻止X-HTTP-Method-Override请求头
针对你的架构(CloudFront关联ELB作为HTTPS源站),有两种高效的方式实现阻止X-HTTP-Method-Override请求头的需求:
方法一:使用CloudFront Functions(推荐,轻量低成本)
CloudFront Functions适合处理简单的请求/响应修改逻辑,延迟低且费用低廉,完全满足移除指定请求头的需求:
- 创建并编写函数
登录AWS控制台,进入CloudFront服务,在左侧菜单选择「Functions」,点击「Create function」:- 填写函数名称,选择「Development」环境
- 替换默认代码为以下逻辑(覆盖所有大小写变体的请求头):
function handler(event) { const request = event.request; // 删除所有大小写形式的X-HTTP-Method-Override请求头 delete request.headers['x-http-method-override']; delete request.headers['X-HTTP-Method-Override']; delete request.headers['X-Http-Method-Override']; return request; } - 发布函数到生产环境
编写完成后点击「Publish」,选择「Publish to production」确认发布。 - 关联到CloudFront分发
在函数详情页的「Associations」标签,点击「Add association」:- 选择你的目标CloudFront分发
- 触发类型选择「Viewer Request」(在请求到达CloudFront时就移除头)
- 点击「Add association」完成配置
方法二:使用Lambda@Edge(适合复杂逻辑场景)
如果后续需要扩展更复杂的请求处理逻辑,Lambda@Edge是更灵活的选择:
- 创建Lambda函数
注意必须在us-east-1区域创建Lambda函数:- 选择Node.js或Python运行时(示例用Node.js)
- 编写处理函数:
exports.handler = async (event) => { const request = event.Records[0].cf.request; // 检查并移除目标请求头 if (request.headers['x-http-method-override']) { delete request.headers['x-http-method-override']; } return request; }; - 配置权限并发布版本
给Lambda函数添加「CloudFront触发器」的权限(可通过控制台自动生成),然后点击「Publish new version」发布一个可用于Edge的版本。 - 关联到CloudFront分发
进入你的CloudFront分发配置,在「Behaviors」标签选择目标行为,点击「Edit」:- 在「Lambda function associations」部分,选择「Viewer Request」触发类型,输入刚才发布的Lambda版本ARN
- 保存修改
验证配置是否生效
可以用curl命令测试:
curl -H "X-HTTP-Method-Override: PUT" -v https://你的CloudFront域名/路径
查看CloudFront或ELB的访问日志,确认X-HTTP-Method-Override请求头已被移除。
内容的提问来源于stack exchange,提问作者ctgopinaath
相关产品推荐
相关产品推荐

