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

Posted

技术标签:

【中文标题】如何在使用 CloudFront 函数重定向请求时包含 HTTP 请求正文?【英文标题】:How can I include the HTTP request body when redirecting requests with CloudFront functions? 【发布时间】:2022-01-12 04:48:54 【问题描述】:

我正在尝试向我的 CloudFront 分配添加一个行为,以将请求重定向到 my.domain/apiapi.my.domain。我尝试了常规的 /api 行为,但我从 API Gateway 收到 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?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如何在使用 CloudFront 函数重定向请求时包含 HTTP 请求正文?的主要内容,如果未能解决你的问题,请参考以下文章