Шлюз API, заблокированный политикой CORS: заголовок «Access-Control-Allow-Origin» отсутствует - PullRequest
0 голосов
/ 07 ноября 2018

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

Я развернул API с использованием безсерверной инфраструктуры, но у меня возникли проблемы с CORS.

Я делаю запрос на получение, используя axios:

axios.get('https://test.execute-api.us-west-1.amazonaws.com/dev/test?from=2012-01-09T21:40:00Z')
     .then(response => {
       this.data = response.data;
     })
     .catch(error => console.log(error))

И я получаю следующую ошибку:

Access to XMLHttpRequest at 'https://test.execute-api.us-west-1.amazonaws.com/dev/test?from=2012-01-09T21:40:00Z' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Что я уже сделал:

  • Убедился, что в API Gateway есть метод OPTIONS с ответом метода, который выглядит следующим образом:

enter image description here

  • Убедитесь, что я внедрил эти изменения.

Кроме того, ответ моей функции Lambda возвращает следующие заголовки:

return events.APIGatewayProxyResponse{
    StatusCode: http.StatusOK,
    Headers: map[string]string{
        "Access-Control-Allow-Origin":      "http://localhost:8080",
        "Access-Control-Allow-Credentials": "true",
    },
    Body: string(jsonEvents),
}, nil

Я также пытался установить Access-Control-Allow-Origin в '*'

Мой файл serverless.yml имеет cors: true для каждого из событий функции:

functions:
  deploymentFrequency:
    handler: bin/update/deployment-frequency
    events:
      - http:
          path: deployment-frequency
          method: post
          cors: true
  fetchDeploymentFrequency:
    handler: bin/fetch/deployment-frequency
    events:
      - http:
          path: deployment-frequency
          method: get
          cors: true

Чего мне не хватает? Ничто не похоже на работу. Запрос от Postman работает нормально, и похоже, что он включает заголовки, поэтому, похоже, это проблема метода OPTIONS.

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Оказывается, я игнорировал код состояния из ответа: (

Я понял, что на самом деле получаю две ошибки:

  • Код состояния 406 для отсутствующего заголовка Content-Type
  • Ошибка CORS

Первая ошибка была вызвана тем, что я не передавал заголовок Content-Type запросу (у меня была проверка в моем коде, я полностью забыл, что ожидает этот заголовок).

Вторая ошибка была вызвана тем, что я не добавил заголовок Access-Control-Allow-Origin в ответ об ошибке моей функции.

0 голосов
/ 29 июня 2019

Включить Интеграция с прокси-сервером Lamba

return events.APIGatewayProxyResponse{
    StatusCode: http.StatusOK,
    Headers: map[string]string{
        "Access-Control-Allow-Origin": "*",
        "Content-Type": "application/json",
    },
    Body: string(jsonEvents),
}, nil

enter image description here

0 голосов
/ 07 ноября 2018

Моя конфигурация:

(event, context, callback) => {
   callback(null, {
      statusCode: (code || 200),
      body: JSON.stringify(resp),
      headers: { 'Access-Control-Allow-Origin': '*'},
   });
}

и у меня все работает нормально. Я использую, чтобы иметь ту же проблему, что и вы, но до тех пор, пока вы определяете свою функцию с помощью CORS: true и ваш ответ содержит заголовок, все будет в порядке.

Примечание: я не понял синтаксис "map [string] string", и учетные данные не должны быть необходимы в этом случае.

...