2016-06-23 14 views
1

AWS Api GatewayのリソースでCORSを有効にすることはできません。CORSを有効にするにはどうすればよいですか?

私は、Web UIに存在する "CORSを有効にする" ボタンを使用:私が使用している

enter image description here

enter image description here

しかし、開発や生産の歩留まりに使用しようとしますjQuery 2.2.4およびメソッド$.post

どうなりますか?

UPDATE:テストステージング:

enter image description here

SUCCESSのUPDATE:

AWSのドキュメントはかなり大きくなる可能性があります。私が気づいていなかったのは、クライアントが生成したSDKをエクスポートする必要があります。これには、提供したリソースに基づいてメソッドを生成するグローバル変数があります。私はこのコードを使用するときのような、私は最終的にsuccesfullの結果を返すことができます。

const apigClient = apigClientFactory.newClient(); 

    apigClient.purchaseTokenPost({}, card, {}) 
     .then(function(result){ 
      console.log(result); 
     }).catch(function(result){ 
      console.log(result); 
     }); 
+1

'/ purchase/token'でCORSを有効にしましたが、エラーのURLは'/test/purchase/token'です –

+0

私は '' 'test'''と呼ばれるステージを持っています...上のスクリーンショットを添付しました。これは同じ問題ですか?Rory? – ilrein

答えて

0

CORSをあなたの方法に正しくセットアップされているようです。私は、このツールを使用してテスト: http://client.cors-api.appspot.com/client(、POSTドロップダウンをあなたのinvoke URLを入力して、あなたが成功を確認することができ、「オンロード」コールバックがトリガーされる)

は、あなたはそれがだ場合絞り込むことが無地のJavaScriptを使用して、要求を作ってみることができますjQueryの問題?参照:A CORS POST request works from plain javascript, but why not with jQuery?

編集: これを見つけたのはhttp://enable-cors.org/server_awsapigateway.htmlです。 APIゲートウェイのワンクリックCORSボタンがjQueryと互換性がないように見えます。

Amazon APIゲートウェイは、APIゲートウェイコンソールの簡単なボタンを使ってCORSのサポートを追加しています。残念なことに、そのボタンには部分的な振る舞いがあります。したがって、CORSは200の回答(他のHTTPステータスコードではない)に対してのみ正しく設定され、JQueryヘッダーのサポートは無視されます。これまで考えられていた最良の解決策は、CORSボタンを使用して手動で設定を行うことです。これは、ステップのカップルで達成することができます...

(決勝)編集:これは、統合はエラー応答を返した場合、API Gatewayは、ヘッダマッピングを適用しないとバグです。 https://forums.aws.amazon.com/thread.jspa?threadID=220324&tstart=0

+0

X-Requested-Withを追加すると、 '*'は役に立たず、vanillia JSに切り替えることもできませんでした(http://youmightnotneedjquery.com/から投稿リクエストを試みました)。 Web UIで関数をテストすると、期待どおりのトークンが返されます。 – ilrein

+0

万が一エンドポイントが4xxまたは5xxエラーを返していますか? CORSには既知の問題があり、適切なヘッダーを送信しないエラー応答があります。 –

+0

あなたのスクリーンショットから、400が返されています。これはしばらくの間、既知の問題でした。 https://forums.aws.amazon.com/thread.jspa?threadID=220324&tstart=0 –

0

「セキュリティで保護されていない」APIコール(つまり、私が何かをテストしたように)でAPIキーで保護されていないAPIコールであっても、それが見つかりました。 APIキーを作成してリクエストとともに送信した場合にのみ有効になります。簡単に行うことができますし、試してみることもできます。

ADDL INFO:ここ

が、私はエンドポイントでCORSを有効にした後、私のために働いたサンプルjQueryのです:私は2つの場所でAPIキーを含め

function loadData() { 
      $.ajax({ 
       type: "GET", 
       cache: false, 
       url: "https://k4t999edod.execute-api.us-east-1.amazonaws.com/prod/myapicall", 
       crossDomain: true, 
       dataType: "json", 
       headers: { 'x-api-key': 'xoeNNQ9475PCAgLtNP18cTv6YTWWB2JFfOe', 'X-Amz-Date': '1/1/2000', 'X-Amz-Security-Token': 'xoeNNQ9475PCAgLtNP18cTv6YTWWB2JFfOe' }, 
       success: function (response) { 
        //do something here. 
       } 
      }); 
     } 

注意(私は本当のものをスクランブル)

+0

を参照してください。バニラJSリクエストに「x-api-key」ヘッダーを追加してapiキーを有効にしても、CORSエラーが返されます。私は間違って何をしていますか? =( – ilrein

関連する問題