CORS невозможен для AWS Интеграция Lambda HTTP API Gateway - PullRequest
2 голосов
/ 13 апреля 2020

Функция AWS Lamba (NodeJS) возвращает 3 заголовка HTTP: aaa, Access-Control-Allow-Origin и bbb были созданы:

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        headers: { "aaa":"aaa", "Access-Control-Allow-Origin":"*", "bbb":"bbb" },
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

Функция интегрирована в HTTP API (не REST API). В разделе «Настройка шлюза HTTP API» в разделе «Настройка CORS» заголовок HTTP «Access-Control-Allow-Origin» был установлен на «*». Смотрите скриншот:

Конфигурация шлюза

Команда "curl -i https://xxxxxxxxxx.execute-api.eu-central-1.amazonaws.com" доказывает, что HTTP-заголовок Access-Control- Allow-Origin явно удаляется, потому что возвращаются только HTTP-заголовки aaa и bbb:

HTTP/2 200 
date: Tue, 14 Apr 2020 11:01:58 GMT
content-type: text/plain; charset=utf-8
content-length: 20
aaa: aaa
bbb: bbb
apigw-requestid: K-S2EjVWliAEJKw=

Почему этот заголовок все еще отсутствует, даже после того, как было выполнено «Configure CORS»?

(Сейчас я гуглю уже более двух дней, чтобы найти решение, и это сводит меня с ума go)

1 Ответ

3 голосов
/ 14 апреля 2020

Согласно Настройка CORS для HTTP API -

Если вы настраиваете CORS для API, API-шлюз игнорирует заголовки CORS, возвращаемые из вашей серверной интеграции.

Вот почему заголовки CORS из вашей лямбды (интеграции) игнорируются. Это одно из отличий между новыми HTTP API от оригинальных REST API. В случае этих API -

Для запроса CORS API-шлюз добавляет настроенные заголовки CORS к ответу от интеграции.

Когда вы делаете простое свертывание, это не актуально при выполнении запроса кросс-источника. Следовательно, вы не видите заголовки CORS, которые были бы установлены HTTP API. Чтобы проверить, работает ли CORS-запрос, я передал заголовок Origin в приведенном ниже запросе и вижу заголовки CORS вместе с моими пользовательскими заголовками из Lambda -

$ curl -v -X GET https://$API_ID.execute-api.$AWS_REGION.amazonaws.com -H "Origin: https://www.example.com"

< HTTP/2 200
< date: Tue, 14 Apr 2020 18:02:26 GMT
< content-type: text/plain; charset=utf-8
< content-length: 18
< aaa: aaa
< bbb: bbb
< access-control-allow-origin: https://www.example.com
< access-control-expose-headers: date, x-api-id

Ниже приведен фрагмент моей конфигурации CORS на API. Я добавил значение Access-Control-Allow-Origin как https://www.example.com и передал это как часть заголовка Origin в моем запросе curl. Такой запрос будет квалифицироваться как CORS.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...