AWS Api Gateway не отвечает заголовками CORS только на вызов OPTIONS

#amazon-web-services #cors #aws-api-gateway #api-gateway

Вопрос:

Я попытался добавить CORS в свой HTTP API, И он работает для GET, POST и т. Д., Но не для вызовов OPTIONS. В чем может быть причина?

Это совершенно новый HTTP API в AWS API Gateway. Я добавил некоторую функцию hello world lambda в качестве маршрута и * в качестве разрешенного источника. Я думал, что весь смысл вызовов OPTIONS заключается в отправке этих заголовков…

Вот Postman, запрашивающий POST С помощью POST

И здесь с ПАРАМЕТРАМИ введите описание изображения здесь

Это моя конфигурация маршрутов введите описание изображения здесь

И это моя конфигурация CORS введите описание изображения здесь

Комментарии:

1. Прокси или не прокси?

2. Нет прокси-сервера. Маршрут просто / ЛЮБОЙ

3. OPTIONS не имеет CORS — что вы имеете в виду, это работает для GET amp; POST, но не для OPTIONS? Возвращают ли запросы GET / POST ошибки CORS? В чем собственно проблема? Не могли бы вы добавить скриншоты, пожалуйста?

4. Я добавил скриншоты Postman. Я ожидал, что в ответе на запрос OPTIONS также будет access-control-allow-origin заголовок, чтобы мой API работал в браузерах

5. Настроили ли вы CORS в API Gateway для разрешения метода OPTIONS? Кроме того, есть ли у вашего лямбда-выражения соответствующие ответы на возврат?

Ответ №1:

Вы должны иметь возможность легко добавлять поддержку опций для своего API в свою спецификацию:

 options:
  summary: CORS support
  description: |
    Enable CORS by returning correct headers
  tags:
    - CORS
  responses:
    200:
      description: Default response for CORS method
      headers:
        Access-Control-Allow-Origin:
          schema:
            type: string
        Access-Control-Allow-Methods:
          schema:
            type: string
        Access-Control-Allow-Headers:
          schema:
            type: string
      content: {}
  x-amazon-apigateway-integration:
    type: mock
    requestTemplates:
      application/json: |
        {
          "statusCode" : 200
        }
    responses:
      default:
        statusCode: '200'
        responseParameters:
          method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
          method.response.header.Access-Control-Allow-Methods: "'*'"
          method.response.header.Access-Control-Allow-Origin: "'*'"
        responseTemplates:
          application/json: |
            {}
 

Это должно работать для интеграций без прокси и возвращает правильные заголовки непосредственно из API, а не из лямбда. Возможно, вам потребуется изменить параметры ответа в соответствии с вашими потребностями.

Для интеграции с прокси-сервером необходимо реализовать ответ в функции lambda (https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html )

Комментарии:

1. Спасибо, но как мне это правильно импортировать? Я попытался добавить его в свою экспортированную конфигурацию openapi. Маршрут был добавлен, но интеграция отсутствует. При запросе конечной точки я не получаю 204 содержимого.