他の関連する質問はまだ調べましたが、これは異なるようです。 実際、私の質問はと非常に似ていますが、私は400ステータスの問題がありません。AWS API Gateway CORS OPTIONSでOK、POSTで失敗しました
設定:なし、必要なAPI KEY:ステージに展開
偽:テスト
1リソース、1つのPOST
- ラムダ関数APIゲートウェイ
- 認証を通じてラムダを積分する方法。
- たとえば、POSTエンドポイントを直接呼び出します。カールは常に200(ペイロードの有無にかかわらず、ペイロードが悪いなど)を返します。これは、参照されている質問とは異なります。
私は「CORSを有効にする」オプションを使用しました。このオプションをリソースとPOST要求の両方に適用しようとしました(後でAPIを展開する)。
API GWでは、Access-Control-Allow-Origin
がPOSTメソッド - レスポンス領域の200レスポンスヘッダーに記載されています。
結果: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-
何もヘッダ。
他に何を確認できますか?
新しい「ラムダプロキシインテグレーション」は、新しいANYメソッドを作成するだけなので、壊れていると思います。これはCORSと完全に統合されていないようで、デフォルトのLambdaトリガーウィザードでさえもそうです。今のところ、私は "ラムダプロキシインテグレーション"を無効にし、手動でGET/POSTメソッドを作成することによってのみこれを修正することができました。 – alexcasalboni
私の経験では、その部分は働いていました。 ANYメソッドは、LPIの場合、すべてのメソッド(POST、GETなど)をラムダに送るキャッチオールです。ラムダに何か問題がある場合のエラーは非常に誤解を招きます。 – bebbi
"Lambda Proxy Integration"は、ラムダ機能からのステータスコードと応答ヘッダーを制御する方法です。プロキシ統合を無効にすると、常に200応答が返され、応答コンテンツの設定のみが許可されます。 プロキシ統合が有効になっているAPI GWを使用する場合は、ラムダ内のCORSヘッダーの設定が必要になります。 (http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html) –