如何通过CloudFront自定义函数检测请求的HTTP/HTTPS协议?
能否通过CloudFront函数检测/提取HTTP/HTTPS协议?
完全可以,CloudFront函数的请求对象中提供了直接获取请求协议的方式,无需依赖自动重定向的CloudFront行为,你可以手动完成检测和后续逻辑。
核心检测方式
CloudFront函数中可以通过两种可靠方式获取请求的协议:
request.scheme属性:这是CloudFront函数请求对象的原生属性,直接返回当前请求的协议(值为http或https)。cloudfront-forwarded-proto请求头:CloudFront会自动为转发到源站的请求添加这个头,其值同样对应原始请求的协议。你可以通过request.headers['cloudfront-forwarded-proto'][0].value获取。
手动实现HTTP到HTTPS重定向的示例代码
如果你需要手动完成重定向逻辑,而非依赖CloudFront的自动行为,可以用以下CloudFront函数代码:
function handler(event) { const request = event.request; const currentScheme = request.scheme; // 检测是否为HTTP请求 if (currentScheme === 'http') { // 构造HTTPS重定向URL const redirectUrl = `https://${request.headers.host[0].value}${request.uri}`; return { statusCode: 301, statusDescription: 'Moved Permanently', headers: { location: { value: redirectUrl } } }; } // 若是HTTPS请求,直接返回原请求 return request; }
注意事项
- 确保将该函数关联到对应的CloudFront分发的查看器请求事件中,这样才能在请求到达CloudFront时就执行协议检测。
- 如果你不需要重定向,只是提取协议做其他处理(比如添加自定义头到源站),直接使用
request.scheme或cloudfront-forwarded-proto的值即可。
内容的提问来源于stack exchange,提问作者Boris
相关产品推荐
相关产品推荐

