Cross-Origin Resource Sharing (CORS) 設定
概要
Red Hat build of Quarkus ドキュメントへのフィードバックの提供
エラーを報告したり、ドキュメントを改善したりするには、Red Hat Jira アカウントにログインし、課題を送信してください。Red Hat Jira アカウントをお持ちでない場合は、アカウントを作成するように求められます。
手順
- 次のリンクをクリックして チケットを作成します。
- Summary に課題の簡単な説明を入力します。
- Description に課題や機能拡張の詳細な説明を入力します。問題があるドキュメントのセクションへの URL も記載してください。
- Submit をクリックすると、課題が作成され、適切なドキュメントチームに転送されます。
第1章 Cross-Origin Resource Sharing (CORS)
Quarkus で CORS を有効にして設定し、許可されるオリジン、メソッド、ヘッダーを指定して、ブラウザーがクロスオリジンリクエストを安全に処理できるようにします。
クロスオリジンリソース共有 (CORS) は、HTTP ヘッダーを使用して、外部オリジンからのリソースに対するブラウザーのリクエストを安全に管理します。許可されたオリジン、メソッド、ヘッダーを指定することにより、Quarkus サーバーは CORS フィルターを使用して、制御されたアクセスを維持しながらブラウザーがドメイン間でリソースを要求できるようにすることができます。このメカニズムにより、セキュリティーが強化され、正当なクロスオリジンリクエストがサポートされます。オリジン定義の詳細は、Web オリジンコンセプトを 参照してください。
1.1. CORS フィルターを有効にする
アプリケーションで CORS ポリシーを適用するには、src/main/resources/application.properties
ファイルに次の行を追加して、Quarkus CORS フィルターを有効にします。
quarkus.http.cors.enabled=true
quarkus.http.cors.enabled=true
フィルターは、すべての受信 HTTP リクエストをインターセプトしてクロスオリジンリクエストを識別し、設定されたポリシーを適用します。次に、フィルターは HTTP 応答に CORS ヘッダーを追加し、許可されたオリジンとアクセスパラメーターをブラウザーに通知します。プリフライトリクエストの場合、フィルターは HTTP 応答を直ちに返します。通常の CORS リクエストの場合、リクエストが設定されたポリシーに違反すると、フィルターは HTTP 403 ステータスでアクセスを拒否します。それ以外の場合、ポリシーで許可されていれば、フィルターはリクエストを宛先に転送します。
詳細な設定オプションについては、次の設定プロパティーセクションを参照してください。
ビルド時に固定された設定プロパティー: その他の設定プロパティーはすべて実行時にオーバーライドできます。
設定プロパティー | 型 | デフォルト |
CORS に許可されたオリジン。
有効な URL のコンマ区切りリスト (例
環境変数: | list of string | |
CORS リクエストに許可される HTTP メソッド。
デフォルト: 任意の HTTP リクエストメソッドが許可されます。
環境変数: | list of string | |
CORS リクエストに許可される HTTP ヘッダー。
有効なヘッダーのコンマ区切りリスト (例: デフォルト: 任意の HTTP リクエストヘッダーが許可されます。
環境変数: | list of string | |
CORS 応答で公開される HTTP ヘッダー。
公開するヘッダーのコンマ区切りリスト (例: デフォルト: ヘッダーは公開されません。
環境変数: | list of string | |
プリフライトリクエストの結果をキャッシュできる期間をブラウザーに通知します。
環境変数: | Duration | |
リクエストの認証情報モード
デフォルト:
環境変数: | boolean |
duration の値を書き込むには、標準の java.time.Duration
フォーマットを使用します。詳細は、Duration#parse() Java API ドキュメント を参照してください。
数字で始まる簡略化されたフォーマットも使用できます。
- 値が数値のみの場合は、秒単位の時間を表します。
-
数字の後に
ms
が続く値は、ミリ秒単位の時間を表します。
その他の場合は、解析のために簡略化されたフォーマットが java.time.Duration
フォーマットに変換されます。
-
数字の後に
h
、m
、またはs
が続く値には、接頭辞PT
が付きます。 -
数字の後に
d
が続く値は、接頭辞P
が付きます。
1.2. CORS 設定の例
次の例は、オリジンの 1 つを定義する正規表現を含む完全な CORS フィルター設定を示しています。
quarkus.http.cors.enabled=true quarkus.http.cors.origins=http://example.com,http://www.example.io,/https://([a-z0-9\\-_]+)\\\\.app\\\\.mydomain\\\\.com/ quarkus.http.cors.methods=GET,PUT,POST quarkus.http.cors.headers=X-Custom quarkus.http.cors.exposed-headers=Content-Disposition quarkus.http.cors.access-control-max-age=24H quarkus.http.cors.access-control-allow-credentials=true
quarkus.http.cors.enabled=true
quarkus.http.cors.origins=http://example.com,http://www.example.io,/https://([a-z0-9\\-_]+)\\\\.app\\\\.mydomain\\\\.com/
quarkus.http.cors.methods=GET,PUT,POST
quarkus.http.cors.headers=X-Custom
quarkus.http.cors.exposed-headers=Content-Disposition
quarkus.http.cors.access-control-max-age=24H
quarkus.http.cors.access-control-allow-credentials=true
application.properties
ファイルで正規表現を使用する場合は、適切な動作を確保するために、特殊文字を 4 つのバックスラッシュ (\\\\
) でエスケープします。以下に例を示します。
-
\\\\.
はリテラルの.
文字に一致します。 -
\\. は、
正規表現メタデータ文字として任意の 1 文字に一致します。
パターンを誤ってエスケープすると、意図しない動作やセキュリティー上の脆弱性が生じる可能性があります。デプロイメント前に必ず正規表現の構文を確認してください。
1.3. 開発モードですべてのオリジンを許可する
開発中にオリジンを設定するのは難しい場合があります。開発を簡素化するには、開発モードでのみすべてのオリジンを許可することを検討してください。
quarkus.http.cors.enabled=true %dev.quarkus.http.cors.origins=/.*/
quarkus.http.cors.enabled=true
%dev.quarkus.http.cors.origins=/.*/
開発プロファイル (%dev
) 内のすべてのオリジンのみを許可します。実稼働環境で無制限のオリジンを許可すると、不正なデータアクセスやリソースの不正使用など、重大なセキュリティーリスクが生じます。実稼働環境では、quarkus.http.cors.origins
プロパティーで明示的なオリジンを定義します。