Настройка заголовка ответа HTTP из AWS lambda

My API Gateway/Lamdba setup возвращает заголовок ответа HTTP: Lamdba использует функцию обратного вызова, чтобы вернуть значение как часть json и Integration Response отображает его в заголовок (с помощью integration.response.body)

С помощью этого решения значения возвращаются как в теле, так и в заголовке.

Как я могу отображать заголовки из ответа лямбды без дублирования значений в теле ответа?

Ответ 1

Если у вас включена интеграция с Lambda-прокси, вы можете установить заголовки ответов как часть вывода Lambda, а API-шлюз будет возвращать их как часть HTTP-ответа клиенту.

Пример Node.js:

callback(null, {
    "isBase64Encoded": false, // Set to 'true' for binary support.
    "statusCode": 200,
    "headers": {
        "header1Name": "header1Value",
        "header2Name": "header2Value",
    },
    "body": "...",
});

где headers может быть нулевым или неуказанным, если не нужно возвращать дополнительные заголовки ответа.

См. Формат вывода лямбда-функции для интеграции прокси-серверов.

Ответ 2

и, если у вас НЕ включена интеграция с прокси-сервером Lamba, вы можете добавить (и отобразить) заголовки ответов в консоли шлюза Amazon API:

перейдите к ресурсам → выполнение метода → ответ метода → добавьте заголовок "Access-Control-Allow-Origin" (или любой другой) для статуса http 200. Затем вернитесь к выполнению метода → интеграция метода → http status 200 → установите сопоставление заголовка для 'Access-Control-Allow-Origin' в '*' (или как угодно).

Решена эта ошибка...: "На запрашиваемом ресурсе отсутствует заголовок 'Access-Control-Allow-Origin'"

Ответ 3

Так как в вопросе говорится, что используются пользовательские сопоставления (с использованиемgration.response.body), это означает, что интеграции лямбда-прокси НЕ используются. Поэтому в данном случае решение состоит в том, чтобы отобразить заголовки так, как вы это делаете.

Чтобы удалить дублирование заголовков из части тела, используйте шаблон отображения в ответе интеграции и игнорируйте заголовки в отображении. Я думаю, что вы можете использовать сквозные ответы, поэтому вы видите дублирующиеся заголовки.

Смотрите больше документации здесь: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html