ALB неправильно передает заголовки ответа - PullRequest
1 голос
/ 06 апреля 2019

У меня есть лямбда-мишень за ALB. Моя лямбда - это лямбда-питон.

def handler(event, context):
response = {
    "statusCode": 200,
    "statusDescription": "200 OK",
    "isBase64Encoded": False,
    "headers": {
        "Content-Type": "text/html; charset=utf-8"
    }
}

После нажатия на мой URL с помощью curl, я получаю

< HTTP/1.1 200 OK
< Server: awselb/2.0
< Date: Sat, 06 Apr 2019 04:46:50 GMT
< Content-Type: application/octet-stream
< Content-Length: 0
< Connection: keep-alive

Примечание Content-Type - это поток октетов, который заставляет браузеры загружать ответ в виде файла вместо его отображения. Я попытался добавить дополнительные заголовки "Foo":"Bar" к ответу, и они не отображаются в ответе curl. ALB, кажется, ест мои лямбда-заголовки. Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Оказывается, для моей целевой группы включены многозначные заголовки.Когда эта настройка включена, мои лямбды должны возвращать ответ с полем multiValueHeaders, установленным вместо headers.Поэтому мой лямбда-код должен был быть:

def handler(event, context):
response = {
    "statusCode": 200,
    "statusDescription": "200 OK",
    "isBase64Encoded": False,
    "multiValueHeaders": {
        ["Content-Type": "text/html; charset=utf-8"]
    }
}

Дополнительная информация здесь .

0 голосов
/ 06 апреля 2019

AWS Application Load Balancer преобразует все заголовки ответа в нижний регистр, вам необходимо тщательно проверить заголовки.К сожалению, вы не можете изменять или модифицировать заголовки, которыми манипулирует ALB.Ниже приведена ссылка для заголовков HTTP:

https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html

Для отслеживания запросов для вашего приложения Балансировщик нагрузки:

https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-request-tracing.html

Также,необходимо проверить ограничения для балансировщика нагрузки:

  • Балансировщик нагрузки обновляет заголовок при получении входящего запроса, а не при получении ответа.

  • Если заголовки HTTP больше 7 КБ, балансировщик нагрузки перезаписывает заголовок X-Amzn-Trace-Id с полем Root.

  • С помощью WebSockets вы можетеотслеживать только до тех пор, пока запрос на обновление не будет успешным.

...