SO)で他の関連する質問を見てきましたが、これは異なっているようです。実際、私の質問は これ と非常に似ていますが、 400ステータスの問題。
セットアップ:
ステージへの展開:テスト
1つのリソース、1 POSTラムダを統合するメソッド。
「CORSを有効にする」オプションを使用しました-このオプションをリソースとPOSTリクエスト(および後でAPIをデプロイする)の両方に適用しようとしました。
API GWでは、POSTメソッド-メソッド応答領域の下の200の応答ヘッダーにAccess-Control-Allow-Origin
がリストされています。
結果:Chromeのクライアントコードからエンドポイントを呼び出すと、OPTIONSは成功しますが、Access-Control-Allow-Origin
ヘッダーがないため、POSTは失敗します。
カール中:OPTIONSコール
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-
anythingヘッダーはありません。
他に何を確認できますか?
問題は、APIゲートウェイがチェックされた"Lambda Proxy Integration"
オプションを使用してラムダ関数を呼び出したことです。
新しく作成されたラムダ関数にAPIゲートウェイトリガーを追加すると、これはデフォルトでアクティブになると思います。
API Gateway-Resource-Methodビュー内では、[Integration Response]ボックスがグレー表示され、(Enable CORS関数の場合でも)そこにAccess-Control-Allow-Origin
ヘッダーを追加する方法がないようです。@ Abhigna_Nagarajaによると必要とされている。
解決策:「LambdaProxy Integration」を使用している場合は、'Access-Control-Allow-Origin': '*'
ヘッダーをラムダ関数に追加します。
さらに良い方法:同じビュー-統合リクエストで、「Lambda Proxy Integration」をオフにし、CORSを再度有効にします(後でデプロイします)。
(次に、コールバックで、{ statusCode, headers, body }
オブジェクトの代わりにペイロードjsonのみを返す必要があります。)
更新:
Httpステータスコードまたはjsonペイロードのどちらでリクエストレスポンスステータス情報を返すかわからない場合に役立ついくつかの読み取り:
「EnableCORS」オプションは、すべての統合/メソッド応答ヘッダーマッピングを設定する便利なツールです。 [CORSを有効にする]をクリックしてから新しいリソースを追加した場合、必要な設定がありません。 [CORSを有効にする]をもう一度クリックするか、手動で次のように設定することができます
また、curlを使用して変更をテストする前に、APIをデプロイすることを忘れないでください。