要解决AWS应用负载均衡器无法处理使用gzip压缩的请求体和content-type为application/json的请求,您可以使用AWS Lambda函数来处理这种情况。下面是一个使用Node.js示例代码:
首先,创建一个Lambda函数来解压缩请求体数据,并将其转发给负载均衡器:
const zlib = require('zlib');
const http = require('http');
exports.handler = async (event, context) => {
const requestBody = Buffer.from(event.body, 'base64');
const uncompressedData = zlib.gunzipSync(requestBody);
const options = {
hostname: '<负载均衡器的DNS名称>',
port: 80,
path: '<转发路径>',
method: event.httpMethod,
headers: {
'Content-Type': 'application/json',
'Content-Length': uncompressedData.length
}
};
return new Promise((resolve, reject) => {
const req = http.request(options, (res) => {
let responseBody = '';
res.on('data', (chunk) => {
responseBody += chunk;
});
res.on('end', () => {
resolve({
statusCode: res.statusCode,
headers: res.headers,
body: responseBody
});
});
});
req.on('error', (e) => {
reject(e);
});
req.write(uncompressedData);
req.end();
});
};
然后,将此Lambda函数与API Gateway集成,以便将请求转发给Lambda函数:
现在,您可以使用生成的API的URL来发送gzip压缩的请求体和content-type为application/json的请求,API Gateway将自动将请求转发给Lambda函数进行处理。