API Gateway(SAM)에 POST하면 OPTIONS 때문에 화가 났을 때의 대처

3047 단어 CORSsamAPIGateway

사건



웹 페이지에서 Ajax에서 JSON을 APIGateway로 POST하면 메소드가 POST가 아닌 OPTIONS로 변경되어 거부됩니다.

AWS SAM Local에서의 API 개발로 뒷면에는 Lambda가 있다고 하는 상황입니다.



Ajax를 요청한 웹페이지에서는 ↓↓처럼 화가났다.



결론



APIGateway에 CORS를 허용하는 설정으로 해결.

AWS 공식 문서 에 있는 대로 SAM 템플릿에 아래를 기술하는 것으로 해결.
Globals:
  Api:
    # Allows an application running locally on port 8080 to call this API
    Cors:
      AllowMethods: "'OPTIONS,POST,GET'"
      AllowHeaders: "'Content-Type'"
      AllowOrigin: "'http://localhost:8080'" # "'*'"でもいけた

lambda의 결과를 POST한 웹페이지에서 받고 싶다면 lambda의 응답을 아래와 같이 한다.
그렇지 않으면, POST는 할 수 있어도 응답을 받을 수 없다.
// node.jsの場合
return {
    'statusCode': 200,
    'headers': {
        "Access-Control-Allow-Origin": "http://localhost:8080" // "'*'"でもいけた
    },
    'body': json.dumps(response)
}

원인



거친 원인은 브라우저에 의한 프리 플라이트라는 구조 때문입니다.
소통 테스트 같은 것으로, 이것에 넘어지고 있었다.

그래서 프리플라이트를 받아들이는 설정을 APIGateway로 할 필요가 있다.

끝에



처음에 "axios post 할 수 없다"같은 느낌으로 프런트 측을 의심해 버려 해결까지 돌았습니다. . .

좋은 웹페이지 즐겨찾기