使用 CloudFront 函数重定向请求时如何包含 HTTP 请求正文?
How can I include the HTTP request body when redirecting requests with CloudFront functions?
我正在尝试向我的 CloudFront 分配添加一个行为,以将请求重定向到 my.domain/api
到 api.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,一切都按预期工作。
我正在尝试向我的 CloudFront 分配添加一个行为,以将请求重定向到 my.domain/api
到 api.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,一切都按预期工作。