GET请求Authorization头缺失问题排查(关联CloudFront)
问题根源
直接访问EC2实例的GET请求能正常携带Authorization头,说明问题完全出在CloudFront配置上。核心原因是:CloudFront默认不会将Authorization这类敏感/自定义请求头转发至源站,尤其是对于默认会被缓存的GET请求——CloudFront为了提升缓存命中率,仅会转发少数标准HTTP头,其余头需要手动配置才能传递到后端。
解决步骤
- 配置CloudFront行为转发Authorization头
- 进入AWS CloudFront控制台,找到目标分发的「行为」标签页,编辑对应API路径的行为规则
- 在「缓存键和源请求」板块,处理「源请求策略」:
- 若已有自定义源请求策略,检查并确保策略中包含
Authorization头; - 若无合适策略,创建新的源请求策略:在「要包含的头」中选择「添加自定义」,输入
Authorization并保存,再将该策略关联到当前行为
- 若已有自定义源请求策略,检查并确保策略中包含
- 禁用带Authorization的GET请求缓存(推荐)
携带用户身份信息的GET请求不适合缓存,可在同一行为编辑页面:- 将「缓存策略」设置为AWS托管的「Managed-CachingDisabled」,直接禁用该行为的缓存;
- 若需部分缓存,也可在「缓存基于请求头」中选择「全部」,但这会导致每个不同的Authorization头生成独立缓存,命中率极低,不推荐使用
验证
等待CloudFront分发更新完成(通常10-15分钟),重新发起GET请求,查看PM2日志确认Authorization头是否正常传递。
内容的提问来源于stack exchange,提问作者Herbie Vine
相关产品推荐
相关产品推荐

