#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
Комментарии:
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 содержимого.