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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:40:35