amazon-web-services - AWS Lambda / API Gateway 不通过编码
问题描述
我正在尝试将一个有效的 Lumen API 服务转换为 AWS,并且很难让一个外部 REST API 服务工作。该服务返回压缩的数据,但这一事实并未正确地传递回浏览器中的应用程序 (Vue)。我尝试在响应中添加标题,如下所示,但它仍然无法正常工作。我可以在浏览器控制台的响应中看到标题,但浏览器仍然没有解释它,所以数据看起来仍然像垃圾。关于如何进行这项工作的任何线索?
var req = require('request');
exports.handler = function (event, context, callback) {
const params = {
url: 'http://api.service',
headers: { 'Authorization': 'code',
'Accept-Encoding': 'gzip,deflate',
'Content-Type': 'application/json' },
json: {'criteria': {
'checkInDate': '2019-10-22',
'checkOutDate': '2019-10-25',
'additional': {'minimumStarRating': 0},
'cityId': 11774}}
};
req.post(params, function(err, res, body) {
if(err){
callback(err, null);
} else{
callback(null, {
"statusCode": 200,
"headers": {
"Content-Type": "application/json",
"Content-Encoding": "gzip"
},
"body": body
});
}
});
};
解决方案
如果您看到所有乱码字符,很可能您还没有让 API Gateway 将您的 Lambda 答案视为二进制(因为它是从您的 lambda 压缩的)
看一下文档
还有这篇文章
不幸的是,API Gateway 目前没有使用 gzip。如果我们使用的是 HTTP 代理,而另一个 HTTP 端点返回一个 gzip 压缩的响应,它会尝试重新编码,从而混淆响应。
我们必须告诉 API Gateway 将我们的响应视为二进制文件——不要以任何方式接触它。
https://techblog.commercetools.com/gzip-on-aws-lambda-and-api-gateway-5170bb02b543
推荐阅读
- php - 如何修改正则表达式以排除某些文本?
- bash - bash 中的文本文件操作
- mysql - 即使条件为假,也会执行真正的案例语句 - MySQL
- python - 如何在Python目录中查找具有特定文件扩展名的所有文件
- arrays - Flutter json解码_TypeError(类型'List
' 不是类型 'Map 的子类型 ') - python-3.x - 如何使用正则表达式获取“JRLbr6THaTI”链接的 ID?
- r - grep 特定部分或数字/单词,带有 R,包含在文本文件中
- java - 如何使用 JPA 从多列构造模型实例
- terraform - Terraform 计数/可用区
- javascript - 在反应组件中获取枚举描述