API Gateway CORS:「Access-Control-Allow-Origin」ヘッダーなし

103
Tyler 2016-02-04 14:51.

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を呼び出すにはどうすればよいですか?

16 answers

121
riseres 2017-03-27 02:56.

同じ問題が発生します。私は見つけるために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);
};
105
Gabriel Doty 2018-02-19 20:46.

他の誰かがまだこれに遭遇している場合-私は私のアプリケーションの根本原因を突き止めることができました。

カスタムオーソライザーを使用してAPI-Gatewayを実行している場合-API-Gatewayは、実際にサーバーに到達する前に401または403を送り返します。デフォルト-カスタムオーソライザーから4xxを返す場合、API-GatewayはCORS用に構成されていません。

また、API Gatewayを介して実行されているリクエストのステータスコードを取得している場合、0または1リクエストから取得している場合は、おそらくこれが問題です。

修正するには(APIゲートウェイ構成で)「ゲートウェイ応答」に移動し、「デフォルト4XX」を展開して、そこにCORS構成ヘッダーを追加します。すなわち

Access-Control-Allow-Origin: '*'

ゲートウェイを再デプロイしてください-そして出来上がり!

19
Carlos Alberto Schneider 2017-04-07 10:12.

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」オプションを無効にする必要がありました。

16
lase 2018-12-04 08:22.

この問題に関するすべてを無駄に試した場合、私が行った場所に行き着くでしょう。結局のところ、Amazonの既存のCORSセットアップ手順は問題なく機能します...再デプロイすることを忘れないでください!CORS編集ウィザードは、小さな緑色のチェックマークがすべて付いていても、APIをライブで更新しません。おそらく明白ですが、それは私を半日困惑させました。

12
MannyC 2017-04-18 00:24.

私は:私のサンプルの作業手に入れただけで挿入された「アクセス制御-許可-起源」:「*」、内側の{}:ヘッダをラムダ関数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(); }
});
8
theaws.blog 2019-11-28 18:27.

Google社員の場合:

理由は次のとおりです。

  • 単純なリクエスト、または、GET/ POSTCookieなしではプリフライトはトリガーされません
  • パスにCORSを設定すると、API GatewayはOPTIONSそのパスのメソッドのみを作成し、Allow-Originユーザーが呼び出したときに模擬応答を使用してヘッダーを送信しますがOPTIONSGET/POSTAllow-Origin自動的に取得されません
  • CORSモードをオンにして単純なリクエストを送信しようとすると、その応答にAllow-Originヘッダーがないため、エラーが発生します
  • ベストプラクティスに従うことができます。単純なリクエストはユーザーに応答を送信することを意図したものではなく、リクエストと一緒に認証/ Cookieを送信して「シンプルではない」ようにし、プリフライトがトリガーされます
  • それでも、次のリクエストでは、CORSヘッダーを自分で送信する必要があります OPTIONS

要約すると:

  • 無害なものだけがAPIGatewayOPTIONSによって自動的に生成されます
  • OPTIONSパス上のCORSの可能性をチェックするための予防措置としてブラウザでのみ使用されます
  • かどうかCORSをされ受け入れられた実際のメソッドなどに依存しますGET/POST
  • 応答で適切なヘッダーを手動で送信する必要があります
6
Vishal Shetty 2020-04-26 23:23.

ラムダ関数の応答にヘッダーを追加したところ、魅力のように機能しました

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hey it works'),
        headers:{ 'Access-Control-Allow-Origin' : '*' }
    };
    return response;
};
4
Ravi Ram 2019-06-08 08:53.

私は内に簡単な解決策を見つけました

APIゲートウェイ> APIエンドポイントを選択>メソッドを選択(私の場合はPOSTでした)

ドロップダウンアクション> CORSを有効にする..それを選択します。

次に、ドロップダウンアクションを再度選択します> APIをデプロイします(再デプロイします)

出来た !

3
RodP 2018-07-16 05:46.

ラムダオーソライザーが失敗し、何らかの理由でCORSエラーに変換されていることに気付いた後、私は仕事を始めました。私のオーソライザー(および最初に追加すべきいくつかのオーソライザーテスト)への簡単な修正とそれは機能しました。私にとっては、APIGatewayアクション「EnableCORS」が必要でした。これにより、APIに必要なすべてのヘッダーとその他の設定が追加されました。

3
Jason 2020-07-14 15:34.

私にとって、最終的に機能した答えは、Alex Rの答え(2番目に賛成)からのJamesShapiroからのコメントでした。そもそも、S3でホストされている静的Webページを取得して、ラムダを使用して連絡先ページを処理し、電子メールを送信しようとして、このAPIGatewayの問題に直面しました。[]デフォルトの4XXをチェックするだけで、エラーメッセージが修正されました。

2
Ankit Kumar Rajpoot 2020-01-03 23:13.

関数またはコードを変更した後次の2つの手順に従います。

最初にCORSを有効にし、次に毎回APIをデプロイします

2
Ziaur Rahman 2020-01-14 02:19.

両方POSTでCORSを有効にした後でコードをデプロイし、OPTIONS私のために働きました。

1
James L. 2018-12-07 14:34.

私は実行していますが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'"
#...
1
CamHart 2019-04-21 23:31.

私の場合、API Gatewayの承認メソッドとしてAWS_IAMを使用していたため、エンドポイントにアクセスするためのIAMロール権限を付与する必要がありました。

0
Michael Seibt 2019-05-17 23:59.

この問題のもう1つの根本的な原因は、HTTP /1.1とHTTP / 2の違いである可能性があります。

症状:すべてではない一部のユーザーが、ソフトウェアの使用時にCORSエラーを受け取ると報告しました。

問題:Access-Control-Allow-Originヘッダが欠落していました、時々

コンテキスト:ホワイトリストへの照合OPTIONSなど、リクエストの処理と対応するCORSヘッダーでの返信専用のLambdaを配置しました。Access-Control-Allow-OriginOrigin

解決策: 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

0
Nigel Atkinson 2019-10-30 16:25.

他のコメントに加えて、注意すべき点は、基礎となる統合から返されるステータスと、そのステータスに対してAccess-Control-Allow-Originヘッダーが返されるかどうかです。

'Enable CORS'を実行すると、200ステータスしか設定されません。エンドポイントに他のユーザー(4xxや5xxなど)がある場合は、ヘッダーを自分で追加する必要があります。

Related questions

MORE COOL STUFF

Reba McEntire は、彼女が息子の Shelby Blackstock と共有する「楽しい」クリスマスの伝統を明らかにしました:「私たちはたくさん笑います」

Reba McEntire は、彼女が息子の Shelby Blackstock と共有する「楽しい」クリスマスの伝統を明らかにしました:「私たちはたくさん笑います」

Reba McEntire が息子の Shelby Blackstock と共有しているクリスマスの伝統について学びましょう。

メーガン・マークルは、自然な髪のスタイリングをめぐってマライア・キャリーと結ばれました

メーガン・マークルは、自然な髪のスタイリングをめぐってマライア・キャリーと結ばれました

メーガン・マークルとマライア・キャリーが自然な髪の上でどのように結合したかについて、メーガンの「アーキタイプ」ポッドキャストのエピソードで学びましょう.

ハリー王子は家族との関係を修復できるという「希望を持っている」:「彼は父親と兄弟を愛している」

ハリー王子は家族との関係を修復できるという「希望を持っている」:「彼は父親と兄弟を愛している」

ハリー王子が家族、特にチャールズ王とウィリアム王子との関係について望んでいると主張したある情報源を発見してください。

ワイノナ・ジャッドは、パニックに陥った休暇の瞬間に、彼女がジャッド家の家長であることを認識しました

ワイノナ・ジャッドは、パニックに陥った休暇の瞬間に、彼女がジャッド家の家長であることを認識しました

ワイノナ・ジャッドが、母親のナオミ・ジャッドが亡くなってから初めての感謝祭のお祝いを主催しているときに、彼女が今では家長であることをどのように認識したかを学びましょう.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

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?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

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!

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

世界最小のマルチツールを15ドルでキーチェーンに追加

世界最小のマルチツールを15ドルでキーチェーンに追加

爪| $ 15 | マルボロ&ケインザクロー| $ 15 | Malboro&Kane世界最小のマルチツールであるTheClawをたった15ドルで手に入れましょう。男の子と一緒に冷たいものを割って開けたり、ネジを締めたり、Amazonパッケージを細断したりする場合でも、この悪い男の子はこれまでで最も便利な製品の1つです。

ワンダーウーマンの続編の悪役についてのより多くの噂

ワンダーウーマンの続編の悪役についてのより多くの噂

ワンダーウーマンとしてのガル・ガドット。WaywardPinesは正式に終了しました。

42,000試合で作られた球がスローモーションで燃えるのを見るのは魅力的な光景です

42,000試合で作られた球がスローモーションで燃えるのを見るのは魅力的な光景です

人が2つのマッチを接着するように導くものは何ですか?何があなたをマッチに打ち続け、構造が湾曲していることを発見するのですか?42,000のボールを作るまで、試合を続けなければならない理由は何ですか?しかし、何よりも、これほど魅力的なショーである可能性はどのようにありますか?私はあなたをだますつもりはありません、次に私たちがあなたに残すのは、あなたや私のような人が自由な時間を過ごすことを決定するビデオですボールを作るために必要な試合数を確認します(答えは42です。

サクラメントビーが1950万人のカリフォルニア州の有権者記録を漏らし、ハッカーによって即座に侵害された

サクラメントビーが1950万人のカリフォルニア州の有権者記録を漏らし、ハッカーによって即座に侵害された

写真:AP先月、カリフォルニアの地元新聞が1,900万件以上の有権者記録をオンラインで公開しました。Gizmodoは今週、明らかなランサムウェア攻撃中にレコードが侵害されたことを確認しました。

米国のフィギュア スケートは、チーム イベントでの最終決定の欠如に「苛立ち」、公正な裁定を求める

米国のフィギュア スケートは、チーム イベントでの最終決定の欠如に「苛立ち」、公正な裁定を求める

ロシアのフィギュアスケーター、カミラ・バリエバが関与したドーピング事件が整理されているため、チームは2022年北京冬季オリンピックで獲得したメダルを待っています。

Amazonの買い物客は、わずか10ドルのシルクの枕カバーのおかげで、「甘やかされた赤ちゃんのように」眠れると言っています

Amazonの買い物客は、わずか10ドルのシルクの枕カバーのおかげで、「甘やかされた赤ちゃんのように」眠れると言っています

何千人ものAmazonの買い物客がMulberry Silk Pillowcaseを推奨しており、現在販売中. シルクの枕カバーにはいくつかの色があり、髪を柔らかく肌を透明に保ちます。Amazonで最大46%オフになっている間にシルクの枕カバーを購入してください

パデュー大学の教授が覚醒剤を扱った疑いで逮捕され、女性に性的好意を抱かせる

パデュー大学の教授が覚醒剤を扱った疑いで逮捕され、女性に性的好意を抱かせる

ラファイエット警察署は、「不審な男性が女性に近づいた」という複数の苦情を受けて、12 月にパデュー大学の教授の捜査を開始しました。

コンセプト ドリフト: AI にとって世界の変化は速すぎる

コンセプト ドリフト: AI にとって世界の変化は速すぎる

私たちの周りの世界と同じように、言語は常に変化しています。以前の時代では、言語の変化は数年または数十年にわたって発生していましたが、現在では数日または数時間で変化する可能性があります。

SF攻撃で91歳のアジア人女性が殴られ、コンクリートに叩きつけられた

犯罪擁護派のオークランドが暴力犯罪者のロミオ・ロレンゾ・パーハムを釈放

SF攻撃で91歳のアジア人女性が殴られ、コンクリートに叩きつけられた

認知症を患っている 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.

メリック・ガーランドはアメリカに失敗しましたか?

バイデン大統領の任期の半分以上です。メリック・ガーランドは何を待っていますか?

メリック・ガーランドはアメリカに失敗しましたか?

人々にチャンスを与えることは、人生で少し遅すぎると私は信じています。寛大に。

Language