CORS блокирует запросы в лямбде Kotlin, но не в идентично настроенном узле лямбда - PullRequest
1 голос
/ 30 октября 2019

У меня есть лямбда, написанная на Kotlin с Serverless и CORS просто не работает. Я чувствую, что перепробовал все. Я развернул Node Lambda с идентичными sls.sh командой и файлами yaml. Функция выглядит следующим образом:

hello:
  handler: handler.hello
  events:
    - http:
        path: hello
        method: post
        cors: true

Мои ответы выглядят так и в Node, и в Kotlin:

{
  "statusCode": 200,
  "headers": {
    "Access-Control-Allow-Origin": "*"
  },
  "body": "{\"id\": \"f9f76590-xxxx-xxxx-xxxx-9c8e99238f40\"}"
}

В случае с Node все это прекрасно работает. Я делаю fetch вызов, подобный этому, и он работает (для краткости опущены разрешения Promise):

  var makeRequest = function (data) {
    fetch('https://{lambda URL}/hello', {
      'headers': {
        'content-type': 'application/json'
      },
      'body': JSON.stringify({ data }),
      'method': 'POST'
      })
  }

В случае Kotlin я получаю эту ошибку CORS обратно

Доступизвлечение по 'https://{lambda URL} / hello' from origin 'http://127.0.0.1:8080' заблокировано политикой CORS: в запрошенном ресурсе отсутствует заголовок' Access-Control-Allow-Origin '. Если непрозрачный ответ отвечает вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.

Я пытаюсь «включить CORS» на панели шлюза API, но получаючто он уже включен:

enter image description here

И нажмите «Отправить», я получаю сообщение об ошибке (недействительный код состояния ответа)

enter image description here

При наведении курсора на значок ошибки появляется сообщение «Указан неверный код состояния ответа».

В разделе «Ответы шлюза» под каждым подпунктом (по умолчанию 4XX, по умолчанию 5XXX и т. Д.)установлены заголовки ответа. Это то же самое для моей ноды и котлинской лямбды.

На данный момент у меня совершенно нет идей.

Единственная потенциально странная вещь - это то, что я замечаю, что в моем запросе к ноду я вижуaccess-control-allow-origin: * в заголовках ответа в сетевой панели браузера, но в Kotlin я его не вижу.

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Я обнаружил, что моя проблема с CORS связана с ошибками сервера. Если на вашем сервере произошла ошибка, а API-шлюз не может получить ответ, вы получите ошибку CORS, поскольку сам шлюз не имеет заголовков CORS.

Хотя исправить это легко (просто обработайте этот серверошибка) это было трудно раскрыть. Я хотел бы, чтобы это было задокументировано лучше где-то, так что, надеюсь, это будет найдено для других:)

Для моего случая конкретно, и почему он не обнаружился в Node, но обнаружился в Kotlin, был из-за типов. браузер отправлял тип Node автоматически исправлял тип (число в строку), но Kotlin ожидал тип и выдавал ошибку типа.

0 голосов
/ 30 октября 2019

Отсюда:

enter image description here

Я вижу, что вы не создали Интеграционный ответ в своем сообщении метод.

Попробуйте следующие конфигурации:

enter image description here

...