API Gateway(SAM)にPOSTしたらOPTIONSだよって怒られた時の対処
事象
ウェブページから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出来ない”みたいな感じでフロント側を疑ってしまい解決まで遠回りしました。。。
Author And Source
この問題について(API Gateway(SAM)にPOSTしたらOPTIONSだよって怒られた時の対処), 我々は、より多くの情報をここで見つけました https://qiita.com/gossan/items/3125cd82e5961e4b653b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .