CORSはAPIGatewayを介して設定され、Access-Control-Allow-Origin
ヘッダーが設定されていますが、Chrome内でAJAXからAPIを呼び出そうとすると、次のエラーが発生します。
XMLHttpRequestはhttp://XXXXX.execute-api.us-west-2.amazonaws.com/beta/YYYYYを読み込めません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン 'null'はアクセスを許可されません。応答のHTTPステータスコードは403でした。
Postmanを介してURLを取得しようとしましたが、上記のヘッダーが正常に渡されたことが示されています。
そして、オプションの応答から:
JSON-Pに戻さずにブラウザからAPIを呼び出すにはどうすればよいですか?
同じ問題が発生します。私は見つけるために10時間を使用しました。
https://serverless.com/framework/docs/providers/aws/events/apigateway/
// handler.js
'use strict';
module.exports.hello = function(event, context, callback) {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*", // Required for CORS support to work
"Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS
},
body: JSON.stringify({ "message": "Hello World!" })
};
callback(null, response);
};
他の誰かがまだこれに遭遇している場合-私は私のアプリケーションの根本原因を突き止めることができました。
カスタムオーソライザーを使用してAPI-Gatewayを実行している場合-API-Gatewayは、実際にサーバーに到達する前に401または403を送り返します。デフォルト-カスタムオーソライザーから4xxを返す場合、API-GatewayはCORS用に構成されていません。
また、API Gatewayを介して実行されているリクエストのステータスコードを取得している場合、0
または1
リクエストから取得している場合は、おそらくこれが問題です。
修正するには(APIゲートウェイ構成で)「ゲートウェイ応答」に移動し、「デフォルト4XX」を展開して、そこにCORS構成ヘッダーを追加します。すなわち
Access-Control-Allow-Origin: '*'
ゲートウェイを再デプロイしてください-そして出来上がり!
1) @riseresやその他の変更と同じことを行う必要がありました。これは、応答ヘッダーです。
headers: {
'Access-Control-Allow-Origin' : '*',
'Access-Control-Allow-Headers':'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
'Access-Control-Allow-Credentials' : true,
'Content-Type': 'application/json'
}
2)そして
このドキュメントによると:
http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
API Gateway構成でラムダ関数にプロキシを使用する場合、postメソッドまたはgetメソッドにはヘッダーが追加されず、オプションのみが追加されます。応答(サーバーまたはラムダ応答)で手動で行う必要があります。
3)そして
それに加えて、APIゲートウェイのpostメソッドで「APIKeyRequired」オプションを無効にする必要がありました。
この問題に関するすべてを無駄に試した場合、私が行った場所に行き着くでしょう。結局のところ、Amazonの既存のCORSセットアップ手順は問題なく機能します...再デプロイすることを忘れないでください!CORS編集ウィザードは、小さな緑色のチェックマークがすべて付いていても、APIをライブで更新しません。おそらく明白ですが、それは私を半日困惑させました。
私は:私のサンプルの作業手に入れただけで挿入された「アクセス制御-許可-起源」:「*」、内側の{}:ヘッダをラムダ関数nodejs生成に。Lambdaで生成されたAPIレイヤーに変更を加えませんでした。
これが私のNodeJSです:
'use strict';
const doc = require('dynamodb-doc');
const dynamo = new doc.DynamoDB();
exports.handler = ( event, context, callback ) => {
const done = ( err, res ) => callback( null, {
statusCode: err ? '400' : '200',
body: err ? err.message : JSON.stringify(res),
headers:{ 'Access-Control-Allow-Origin' : '*' },
});
switch( event.httpMethod ) {
...
}
};
これが私のAJAX呼び出しです
$.ajax({
url: 'https://x.execute-api.x-x-x.amazonaws.com/prod/fnXx?TableName=x',
type: 'GET',
beforeSend: function(){ $( '#loader' ).show();},
success: function( res ) { alert( JSON.stringify(res) ); },
error:function(e){ alert('Lambda returned error\n\n' + e.responseText); },
complete:function(){ $('#loader').hide(); }
});
Google社員の場合:
理由は次のとおりです。
GET
/ POST
CookieなしではプリフライトはトリガーされませんOPTIONS
そのパスのメソッドのみを作成し、Allow-Origin
ユーザーが呼び出したときに模擬応答を使用してヘッダーを送信しますがOPTIONS
、GET
/POST
はAllow-Origin
自動的に取得されませんAllow-Origin
ヘッダーがないため、エラーが発生しますOPTIONS
要約すると:
OPTIONS
によって自動的に生成されますOPTIONS
パス上のCORSの可能性をチェックするための予防措置としてブラウザでのみ使用されますGET
/POST
ラムダ関数の応答にヘッダーを追加したところ、魅力のように機能しました
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify('Hey it works'),
headers:{ 'Access-Control-Allow-Origin' : '*' }
};
return response;
};
私は内に簡単な解決策を見つけました
APIゲートウェイ> APIエンドポイントを選択>メソッドを選択(私の場合はPOSTでした)
ドロップダウンアクション> CORSを有効にする..それを選択します。
次に、ドロップダウンアクションを再度選択します> APIをデプロイします(再デプロイします)
出来た !
ラムダオーソライザーが失敗し、何らかの理由でCORSエラーに変換されていることに気付いた後、私は仕事を始めました。私のオーソライザー(および最初に追加すべきいくつかのオーソライザーテスト)への簡単な修正とそれは機能しました。私にとっては、APIGatewayアクション「EnableCORS」が必要でした。これにより、APIに必要なすべてのヘッダーとその他の設定が追加されました。
私にとって、最終的に機能した答えは、Alex Rの答え(2番目に賛成)からのJamesShapiroからのコメントでした。そもそも、S3でホストされている静的Webページを取得して、ラムダを使用して連絡先ページを処理し、電子メールを送信しようとして、このAPIGatewayの問題に直面しました。[]デフォルトの4XXをチェックするだけで、エラーメッセージが修正されました。
関数またはコードを変更した後次の2つの手順に従います。
最初にCORSを有効にし、次に毎回APIをデプロイします。
両方POST
でCORSを有効にした後でコードをデプロイし、OPTIONS
私のために働きました。
私は実行していますがaws-serverless-express
、私の場合は編集する必要がありますsimple-proxy-api.yaml
。
CORSがに設定される前https://example.com
に、サイトの名前を入れ替えて、を介して再デプロイしたところnpm run setup
、既存のラムダ/スタックが更新されました。
#...
/:
#...
method.response.header.Access-Control-Allow-Origin: "'https://example.com'"
#...
/{proxy+}:
method.response.header.Access-Control-Allow-Origin: "'https://example.com'"
#...
私の場合、API Gatewayの承認メソッドとしてAWS_IAMを使用していたため、エンドポイントにアクセスするためのIAMロール権限を付与する必要がありました。
この問題のもう1つの根本的な原因は、HTTP /1.1とHTTP / 2の違いである可能性があります。
症状:すべてではない一部のユーザーが、ソフトウェアの使用時にCORSエラーを受け取ると報告しました。
問題:Access-Control-Allow-Origin
ヘッダが欠落していました、時々。
コンテキスト:ホワイトリストへの照合OPTIONS
など、リクエストの処理と対応するCORSヘッダーでの返信専用のLambdaを配置しました。Access-Control-Allow-Origin
Origin
解決策: API Gatewayは、HTTP / 2呼び出しの場合、すべてのヘッダーを小文字に変換するようですが、HTTP /1.1の場合は大文字を維持します。これにより、アクセスevent.headers.origin
が失敗しました。
この問題も発生しているかどうかを確認してください。
APIがにhttps://api.example.com
あり、フロントエンドがにあると仮定しますhttps://www.example.com
。CURLを使用して、HTTP / 2を使用してリクエストを行います。
curl -v -X OPTIONS -H 'Origin: https://www.example.com' https://api.example.com
応答出力にはヘッダーを含める必要があります。
< Access-Control-Allow-Origin: https://www.example.com
HTTP / 1.1を使用して(または小文字のOrigin
ヘッダーを使用して)同じ手順を繰り返します。
curl -v -X OPTIONS --http1.1 -H 'Origin: https://www.example.com' https://api.example.com
Access-Control-Allow-Origin
ヘッダーが欠落している場合は、ヘッダーを読み取るときに大文字と小文字の区別を確認することをお勧めしますOrigin
。
他のコメントに加えて、注意すべき点は、基礎となる統合から返されるステータスと、そのステータスに対してAccess-Control-Allow-Originヘッダーが返されるかどうかです。
'Enable CORS'を実行すると、200ステータスしか設定されません。エンドポイントに他のユーザー(4xxや5xxなど)がある場合は、ヘッダーを自分で追加する必要があります。
Reba McEntire が息子の Shelby Blackstock と共有しているクリスマスの伝統について学びましょう。
メーガン・マークルとマライア・キャリーが自然な髪の上でどのように結合したかについて、メーガンの「アーキタイプ」ポッドキャストのエピソードで学びましょう.
ハリー王子が家族、特にチャールズ王とウィリアム王子との関係について望んでいると主張したある情報源を発見してください。
ワイノナ・ジャッドが、母親のナオミ・ジャッドが亡くなってから初めての感謝祭のお祝いを主催しているときに、彼女が今では家長であることをどのように認識したかを学びましょう.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
爪| $ 15 | マルボロ&ケインザクロー| $ 15 | Malboro&Kane世界最小のマルチツールであるTheClawをたった15ドルで手に入れましょう。男の子と一緒に冷たいものを割って開けたり、ネジを締めたり、Amazonパッケージを細断したりする場合でも、この悪い男の子はこれまでで最も便利な製品の1つです。
人が2つのマッチを接着するように導くものは何ですか?何があなたをマッチに打ち続け、構造が湾曲していることを発見するのですか?42,000のボールを作るまで、試合を続けなければならない理由は何ですか?しかし、何よりも、これほど魅力的なショーである可能性はどのようにありますか?私はあなたをだますつもりはありません、次に私たちがあなたに残すのは、あなたや私のような人が自由な時間を過ごすことを決定するビデオですボールを作るために必要な試合数を確認します(答えは42です。
写真:AP先月、カリフォルニアの地元新聞が1,900万件以上の有権者記録をオンラインで公開しました。Gizmodoは今週、明らかなランサムウェア攻撃中にレコードが侵害されたことを確認しました。
ロシアのフィギュアスケーター、カミラ・バリエバが関与したドーピング事件が整理されているため、チームは2022年北京冬季オリンピックで獲得したメダルを待っています。
何千人ものAmazonの買い物客がMulberry Silk Pillowcaseを推奨しており、現在販売中. シルクの枕カバーにはいくつかの色があり、髪を柔らかく肌を透明に保ちます。Amazonで最大46%オフになっている間にシルクの枕カバーを購入してください
ラファイエット警察署は、「不審な男性が女性に近づいた」という複数の苦情を受けて、12 月にパデュー大学の教授の捜査を開始しました。
私たちの周りの世界と同じように、言語は常に変化しています。以前の時代では、言語の変化は数年または数十年にわたって発生していましたが、現在では数日または数時間で変化する可能性があります。
認知症を患っている 91 歳のアジア人女性が最近、47 番街のアウター サンセット地区でロメオ ロレンゾ パーハムに襲われました。伝えられるところによると、被害者はサンフランシスコの通りを歩いていたところ、容疑者に近づき、攻撃を受け、暴行を受けました。
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
人々にチャンスを与えることは、人生で少し遅すぎると私は信じています。寛大に。