Я рассмотрел другие связанные вопросы по SO, но это кажется другим. На самом деле, мой вопрос очень похож на this one, за исключением того, что у меня нет проблемы с статусом 400.AWS API Gateway CORS ok для ОПЦИЙ, сбой для POST
настроенный:
- лямбда-функции через API шлюза
- Авторизация: Нет, ключ API Требуется: ложные
развертывания на этапе: тест
1 ресурс, 1 POST метод интеграции лямбда.
- Вызов конечной точки POST непосредственно, например. с curl всегда возвращает 200 (с/без полезной нагрузки, плохая полезная нагрузка и т. д.) - так что это отличается от упомянутого вопроса.
Я использовал параметр «Включить CORS» - я пробовал применить эту опцию как к ресурсу, так и к запросу POST (и затем развертывать API).
В API GW я могу видеть Access-Control-Allow-Origin
, перечисленные в 200 Ответных заголовках по методу POST - область ответа метода.
Результат: Вызов конечной точки из кода клиента в Chrome, OPTIONS проходит, но POST не удается из-за отсутствия заголовка Access-Control-Allow-Origin
.
В завитка: Парам.вызовов
curl -X OPTIONS -H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: Content-Type" \
-H "Origin: http://example.com" --verbose <endpoint>
ответом является:
< HTTP/1.1 200 OK
< Content-Type: application/json
...
< Access-Control-Allow-Headers: Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token
< Access-Control-Allow-Methods: POST,OPTIONS
< Access-Control-Allow-Origin: *
...
но с POST:
curl -X POST -d '{}' -H "Content-Type: application/json" \
-H "Origin: http://example.com" --verbose <endpoint>
возвращается:
< HTTP/1.1 200 OK
< Content-Type: application/json
...
и ответное тело json - но нет Access-
что-нибудь заголовка.
Что еще я могу проверить?
Я считаю, что новая «Lambda Proxy Integration» нарушена, поскольку она только создает новый ЛЮБОЙ метод. Похоже, что он не идеально интегрирован с CORS и даже с мастером запуска Lambda по умолчанию. На данный момент мне удалось это исправить, отключив «Lambda Proxy Integration» и вручную создав методы GET/POST. – alexcasalboni
По моему опыту эта часть работала. ЛЮБОЙ метод - это все, что в случае LPI будет направлять все методы (POST, GET и т. Д.) На лямбда. Ошибки, если у лямбды есть какая-то проблема, все же вводят в заблуждение. – bebbi
«Lambda Proxy Integration» - это способ управления кодом состояния и заголовками ответов из вашей лямбда-функции. Отключение интеграции прокси-сервера всегда будет возвращать ответ 200 и позволит вам установить только контент ответа. В документах упоминается настройка заголовка CORS внутри вашей лямбды, как требуется при использовании API GW с включенной интеграцией прокси. (Http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html) –