在AWS Lambda@Edge中无需白名单Vary头,能否透传Viewer请求至Origin请求?
Lambda@Edge: 是否需要将Vary Headers加入白名单才能透传Viewer Request头到Origin Request?
Awesome question—咱们把这事掰扯清楚,给你讲得明明白白的。
首先给核心结论:仅仅是把Viewer Request里的请求头透传到Origin Request,完全不需要把这些头加入CloudFront的Vary Headers配置。原因如下:
当你在Lambda@Edge的Viewer Request触发器里处理请求时,你可以直接修改
request.headers对象,保留或添加想要透传的头,然后返回修改后的请求即可。这个透传动作和Vary Headers设置没有半毛钱关系——Vary Headers是用来控制CloudFront如何缓存响应内容的,和请求头能不能传到源站是两个独立的事儿。举个实际例子,如果你想把自定义头
X-User-Preference从用户请求透传到源站,你的Lambda代码可以这么写:
exports.handler = (event, context, callback) => { const request = event.Records[0].cf.request; // 只要保留用户请求里的这个头就行,不需要额外操作(除非你要修改它) callback(null, request); };
部署这个Lambda@Edge触发器之后,CloudFront就会自动把这个头连同其他请求头一起发给源站,根本不需要在CloudFront分发的缓存设置里把X-User-Preference加入Vary Headers。
- 那什么时候才需要配置Vary Headers呢?只有当你的源站会根据某个请求头返回不同内容,并且你希望CloudFront针对不同的头值缓存不同版本的响应时,才需要把这个头加入Vary。比如,如果你的源站根据
Accept-Language返回不同语言的页面,把Accept-Language加入Vary,CloudFront就会缓存不同语言版本的页面,而不是给所有用户返回同一个缓存内容。
总结一下:透传请求头到源站不需要依赖Vary Headers;Vary Headers是缓存策略的一部分,和请求头透传是完全独立的配置项。
内容的提问来源于stack exchange,提问作者Saravanan
相关产品推荐
相关产品推荐

