使用 CloudFront 函数重定向请求时如何包含 HTTP 请求正文?

How can I include the HTTP request body when redirecting requests with CloudFront functions?

我正在尝试向我的 CloudFront 分配添加一个行为,以将请求重定向到 my.domain/apiapi.my.domain。我尝试了常规的 /api 行为,但我从 API 网关收到 403 错误,因此 Reddit 用户建议我尝试 CloudFront 函数。

我能够设置一个 CloudFront 函数来执行重定向,但它似乎从我的 POST 请求中删除了 HTTP 请求正文。

function handler(event) {
    var request = event.request;
    var headers = request.headers;
    var host = request.headers.host.value;
    var uri = request.uri;
    
    var newURL = 'https://api.my.domain' + uri;
    var response = {
        statusCode: 302,
        statusDescription: 'Found',
        headers: { 
            "location": { "value": newURL }
        }
    };
    return response;
}

是否可以使用 CloudFront 函数执行此操作?还是我需要改用 Lambda@Edge?

我弄明白了 - 302 重定向导致客户端重新向没有 HTTP 正文的新域发出 GET 请求,即使原始请求是 POST。解决方案是使用 307 重定向,强制客户端向新主机重新发出完全相同的请求。一旦我将 302 更改为 307,一切都按预期工作。