Может получить, но не POST к лямбде через API-шлюз.Зачем? - PullRequest
0 голосов
/ 05 октября 2018

Ниже приведен запрос клиента.Запрос GET успешен, но запрос POST выдает ошибку.

fetch('api/public/libraries/sign-out-discourse', {
    method: 'GET', // or 'POST'
    headers: new Headers([
        ['Accept', 'application/json'],
        ['Content-Type', 'application/json'],
        ['Authorization', jwtToken],
    ]),
})

Вот ошибка из запроса POST:

HTTP/1.1 403 Forbidden
Server: CloudFront
Date: Fri, 05 Oct 2018 08:50:14 GMT
Content-Type: text/html
Content-Length: 694
Connection: keep-alive
X-Cache: Error from cloudfront
Via: redacted
X-Amz-Cf-Id: redacted

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

ERROR: The request could not be satisfied

403 ERROR
The request could not be satisfied.

This distribution is not configured to allow the HTTP request method that was used for this request. The distribution supports only cachable requests.


Generated by cloudfront (CloudFront) Request ID: redacted

Что япробовал

В CloudFront я выбрал поведение -> редактировать -> Разрешенные методы HTTP: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE.Я лишил законной силы кеши с тех пор, как использовал этот шанс в маловероятном случае, когда AWS каким-то образом сохранит настройки в кеше CloudFront.

В графическом интерфейсе API Gateway я включил CORS для ресурса.С момента внесения этого изменения я повторно развернул API.

Другая отладка

curl -X POST API_ENDPOINT возвращает ту же ошибку, что и вызов конечной точки с помощью POST из моего приложения.

1 Ответ

0 голосов
/ 05 октября 2018

Если вы используете интеграцию Lambda Proxy, вам нужно предоставить в ответе заголовок CORS, API-шлюз не сделает этого за вас для запроса POST.

var response = {
    statusCode: 200,
    headers: {
        "Access-Control-Allow-Origin" : "*",
        "Access-Control-Allow-Credentials" : true
    },
    body: JSON.stringify({"message":"Success"})
}
callback(null, response);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...