Amazon web services AWS应用程序负载平衡器无法处理内容编码gzip和内容类型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

我正试图将一个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.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 sqlbot
cat-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 sqlbot
cat-samples/small-batch.json.gz | gzip-d
正确解码文件。原始json的大小约为10 kb。通过编辑属性>访问日志>打开ALB的S3日志记录,在ALB级别打开日志记录