web-dev-qa-db-ja.com

AWS LambdaでCORS応答ヘッダーを構成しますか?

AWS API Gatewayを使用して新しいサービスを作成しようとしていますが、CORS情報を取得するためにブラウザーが自動的にOPTIONSメソッドを呼び出すことがわかりました。

問題は、AWS API GatewayがCORSヘッダーを構成するネイティブな方法を提供していないことです。

OPTIONSメソッドに応答するためにLambdaスクリプトを作成することは可能ですか?

12

{proxy+}エンドポイントを使用している場合は、Lambda関数でCORS HTTPリクエストを処理する必要があります。実装は、使用しているフレームワークによって異なります。 Expressの場合、最も簡単な解決策は、単純に Express CORSミドルウェア を使用することです。

CORSによるLambdaリクエストを処理したくない場合は、Lambda Methodの設定を変更して、API GatewayレベルでCORSを処理するようにしてください。

AWS API GatewayでのCORSセットアップ の詳細な公式チュートリアルは次のとおりです。

X-Api-KeyでヘッダーAccess-Control-Allow-Headersを許可することも重要です。そうしないと、認証が機能せず、エラーが発生します。

EDIT:2015年11月、API GatewayチームはCORS設定を簡素化する新機能を追加しました。

6
kixorz

ラムダプロキシを有効にしている場合は、CORSヘッダーを手動で設定する必要があります。

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);
};

https://serverless.com/framework/docs/providers/aws/events/apigateway#enabling-cors

25
sqren

JQuery $ .ajaxを使用している場合は、OPTIONSリクエストの後にPOSTを付けてX-Requested-Withを送信します。そのため、OPTIONSアクセスコントロールを設定するときに確認する必要があります。 AWS APIの-accept-headersを使用して、他のヘッダーとともにX-Requested-Withヘッダーを含めます。

1
jomamaxx