Amazon web services AWS应用程序负载平衡器无法处理内容编码gzip和内容类型Application/json的请求正文
我正试图将一个gzip json作为POST请求主体发送给AWS应用程序负载平衡器,它调用AWS Lambda 当我将内容类型请求头设置为application/json时,我得到Amazon web services AWS应用程序负载平衡器无法处理内容编码gzip和内容类型Application/json的请求正文,amazon-web-services,curl,aws-lambda,aws-alb,Amazon Web Services,Curl,Aws Lambda,Aws Alb,我正试图将一个gzip json作为POST请求主体发送给AWS应用程序负载平衡器,它调用AWS Lambda 当我将内容类型请求头设置为application/json时,我得到502坏网关error作为响应,并且不会调用AWS Lambda 我使用下面的curl命令 curl-v-s--data binary@samples/small-batch.json.gz-H“内容编码:gzip”-H”内容类型:application/json”-X POSThttps://sub.domain.c
502坏网关
error作为响应,并且不会调用AWS Lambda
我使用下面的curl命令
curl-v-s--data binary@samples/small-batch.json.gz-H“内容编码:gzip”-H”内容类型:application/json”-X POSThttps://sub.domain.com/batch
我正在发送无效的请求头吗
我的AWS Lambda代码:
import json
def lambda_handler(event, context):
print("event = ", event)
return {
'statusCode': 200,
'body': json.dumps({ 'success': True }),
'headers': {
'Content-Type': 'application/json'
}
}
更新
如果我用空内容类型发出请求,那么Lambda将被成功调用
curl -v --data-binary @samples/small-batch.json.gz -H "Content-Type: " -H "Content-encoding: gzip" -X POST https://sub.domain.com/batch
curl -v --data-binary @samples/small-batch.json.gz -H "Content-Type: application/gzip" -H "Content-encoding: gzip" -X POST https://sub.domain.com/batch
如果我使用应用程序/gzip
内容类型发出请求,那么Lambda将被成功调用
curl -v --data-binary @samples/small-batch.json.gz -H "Content-Type: " -H "Content-encoding: gzip" -X POST https://sub.domain.com/batch
curl -v --data-binary @samples/small-batch.json.gz -H "Content-Type: application/gzip" -H "Content-encoding: gzip" -X POST https://sub.domain.com/batch
502错误仅在我请求时发生,内容编码为gzip
,内容类型为application/json
。但据我所知,这些是有效的标题
更新2
从我在
如果内容类型是以下类型之一,则负载平衡器
按原样将正文发送到Lambda函数,并设置isBase64Encoded
设置为false:text/*、application/json、application/javascript和
application/xml。对于所有其他类型,负载平衡器Base64进行编码
正文并将isBase64Encoded设置为true
因此,我认为header
内容编码:gzip
不能与header内容类型:application/json
耦合。我认为ALB在调用Lambda时出现了一些问题。我确信Lambda调用会有cloudwatch日志(结果有误)。“你看到了吗?”詹姆斯迪安,这就是问题所在。我没有看到任何cloudwatch日志。这就是为什么我得出这样的结论:Lambda不会被调用。如果没有内容类型
,函数是否能像预期的那样工作,但其他一切都是一样的?这似乎就是你所说的,这不适合任何好的解释。你的身体在减压前后是否超过1兆字节?cat-samples/small-batch.json.gz | gzip-d
是否正确解码文件,没有错误?@Michael sqlbotcat-samples/small-batch.json.gz | gzip-d
正确解码文件。原始json的大小约为10 kb。通过编辑属性>访问日志>打开ALBI的S3日志,在ALB级别打开日志记录。我确信lambda调用将有cloudwatch日志(结果有误)。“你看到了吗?”詹姆斯迪安,这就是问题所在。我没有看到任何cloudwatch日志。这就是为什么我得出这样的结论:Lambda不会被调用。如果没有内容类型
,函数是否能像预期的那样工作,但其他一切都是一样的?这似乎就是你所说的,这不适合任何好的解释。你的身体在减压前后是否超过1兆字节?cat-samples/small-batch.json.gz | gzip-d
是否正确解码文件,没有错误?@Michael sqlbotcat-samples/small-batch.json.gz | gzip-d
正确解码文件。原始json的大小约为10 kb。通过编辑属性>访问日志>打开ALB的S3日志记录,在ALB级别打开日志记录