如何在使用 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/api
到 api.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 请求正文?的主要内容,如果未能解决你的问题,请参考以下文章
通过 AWS Lambda 和 CloudFront 重定向 URL
Cloudfront 域名无法使用 S3、Cloudfront 和 Route 53 将 HTTP 重定向到 HTTPS