다른 관련 질문을 살펴 보았습니다. 사실, 내 질문은 this one과 매우 유사합니다. 단, 400 상태 문제는 없습니다.AWS API 게이트웨이 CORS OPTIONS에 대해 확인, POST에 실패했습니다.
셋업 : 없음, 필요한 API의 KEY : 스테이지에 배치
거짓 테스트
1 리소스 1 POST
- 람다 함수 API 게이트웨이
- 권한을 λ를 적분하는 방법.
- 예를 들어. 곱슬 곱슬 함은 항상 페이로드, 페이로드 등의 유무에 관계없이 200을 반환하므로 참조 된 질문과 다릅니다.
"CORS 사용"옵션을 사용했습니다.이 옵션을 리소스 및 POST 요청 (및 나중에 API 배포)에 적용 해 보았습니다.
API GW에서 POST 메서드 - 메서드 응답 영역 아래에 200 응답 헤더에 Access-Control-Allow-Origin
이 나열되어 있습니다.
결과 : Chrome의 클라이언트 코드에서 끝점을 호출하면 OPTIONS가 전달되지만 Access-Control-Allow-Origin
헤더가 없어서 POST가 실패합니다. 컬에서
: 옵션
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
제 경험상 그 부분이 효과가있었습니다. ANY 메서드는 LPI의 경우 모든 메서드 (POST, GET 등)를 람다에 전달하는 포괄적 인 메서드입니다. 람다가 전혀 문제가 없다면 오류는 오해의 소지가 있습니다. – bebbi
"람다 프록시 통합"은 람다 함수의 상태 코드와 응답 헤더를 제어하는 방법입니다. 프록시 통합을 비활성화하면 항상 200 응답 만 반환되며 응답 내용 만 설정할 수 있습니다. 프록시 통합을 사용하도록 설정 한 상태에서 API GW를 사용할 때 필요한대로 람다 내부에 CORS 헤더 설정이 나와 있습니다. (http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html) –