異なるオリジン間でリソースを共有またはアクセスする必要がある場合、カスタム HTTP レスポンスヘッダーを設定できます。このトピックでは、ApsaraVideo VOD のリソースでオリジン間リソース共有を有効にする方法について説明します。
オリジン間リソース共有とは
オリジン間リソース共有 (CORS) は、ウェブページが自身のオリジン (ドメイン、プロトコル、またはポート) とは異なるオリジンからリソースにアクセスできるようにする標準的なメカニズムです。これにより、オリジン間のデータ転送を安全に行うことができます。詳細については、「オリジン間リソース共有 (CORS)」をご参照ください。
Q:デフォルトで CDN の CORS が有効になっていない場合はどうなりますか。
デフォルトでは、CDN はオリジン間リソース共有 (CORS) を有効にしていません。この設定がない場合、ブラウザーは同一オリジンポリシーを適用し、オリジン間のリクエストをブロックするため、他のウェブサイトがお客様のリソースを読み込むことができなくなります。
オリジン間リソース共有を設定する理由
セキュリティ上の制約により、ブラウザーは通常、同一オリジンポリシーに従います。これにより、異なるドメイン、サブドメイン、プロトコル、またはポートからのリソースの読み込みやアクセスが制限されます。たとえば、example.com は example.org 上のリソースにアクセスできません。オリジン間リソース共有 (CORS) を設定することで、CDN/ サーバーに関連するレスポンスヘッダーを設定できます。リクエストに許可されたルールを満たすヘッダーが含まれている場合、サーバーは対応する HTTP レスポンスヘッダーを返し、オリジン間のリソースの読み込みとアクセスを許可します。
仕組み
オリジンサーバーでの CORS 設定
CDN での CORS 設定
オリジン間リソース共有の有効化
-
ApsaraVideo VOD コンソールにログインします。
左側のナビゲーションウィンドウで、[設定管理]> [CDN設定]> [ドメイン名] を選択します。
-
ドメイン名 ページで、対象のドメイン名を見つけて [設定] をクリックします。
-
ドメイン名のナビゲーションペインで、キャッシュ設定 をクリックします。
-
カスタム HTTP レスポンスヘッダー タブをクリックします。
-
追加 をクリックして、カスタム HTTP レスポンスヘッダーを設定します。
-
許可するオリジンのパラメーターを設定し、OK をクリックします。
パラメーター
例
[実行内容]
追加
[応答ヘッダー]
Access-Control-Allow-Origin
[応答ヘッダー値]
*
説明-
値をアスタリスク (
*) に設定すると、あらゆるオリジンからのリクエストを許可できます。 -
値がアスタリスク (
*) でない場合は、1 つ以上の IP アドレス、ドメイン名、またはその両方の組み合わせを指定できます。複数の値はカンマ (,) で区切ります。 -
ヘッダー値が
*でない場合は、http://またはhttps://で始まる必要があります。 -
ヘッダー値にポート番号を含めることができます。
-
ワイルドカードドメイン名がサポートされています。
[重複の許可]
[いいえ]
説明-
はい:重複ヘッダーを許可します。CDN POP は、オリジンサーバーのヘッダーを保持し、同じ名前の新しいヘッダーを追加します。
-
いいえ:重複ヘッダーを禁止します。CDN POP は、オリジンサーバーのヘッダーを新しいヘッダーで上書きします。
このトピックでは、重複を許可しない例を使用しています。実際の設定は、ご利用の環境によって異なる場合があります。
重要[重複を許可] と [CORS] の設定は相互に排他的です。[重複を許可] が [はい] に設定されている場合、CORS 検証は無効になります。
[CORS]
有効化
説明-
CORS は、[操作] が [追加] に設定され、[レスポンスヘッダー] が「Access-Control-Allow-Origin」の場合にのみ設定できます。
-
CORS は [無効化] または [有効化] に設定できます。デフォルト値は [無効化] です。
-
無効の場合、CDN ノードはユーザーリクエストの Origin ヘッダーを検証せず、設定された「Access-Control-Allow-Origin」の値のみで応答します。
-
有効化した場合、CDN ノードは次のルールに従ってユーザーリクエストのオリジン間検証を実行し、検証結果に基づいて「Access-Control-Allow-Origin」の値で応答します。オリジン間検証ルール:
-
ワイルドカード一致:[レスポンスヘッダー] の Access-Control-Allow-Origin の値が「*」に設定されている場合、ユーザーリクエストに
Originパラメーターが含まれているかどうか、またそのパラメーターの値が何であるかに関係なく、Access-Control-Allow-Origin: *ヘッダーが常に返されます。 -
完全一致:[ヘッダー値] は、カンマ (,) で区切られた 1 つ以上の特定のオリジンに設定されます。
-
リクエストの「Origin」ヘッダーの値が設定された値のいずれかと完全に一致する場合、レスポンスには対応するオリジン間ヘッダーが含まれます。
-
完全一致がない場合、レスポンスに CORS ヘッダーは含まれません。
-
-
ワイルドカードドメイン名での一致:[カスタムレスポンスヘッダー] の「Access-Control-Allow-Origin」の値がワイルドカードドメイン名に設定されている場合、システムはリクエストヘッダーの Origin 値がワイルドカードドメイン名と一致するかどうかを検証します。
-
-
有効化した場合、[ヘッダー値] のドメイン名にハイフン
-が含まれている場合は、値を設定する前にハイフンをエスケープする必要があります。-を%-としてエスケープします。例:-
元のヘッダー値:
http://doc.aliyun-example.com。 -
エスケープされたヘッダー値:
http://doc.aliyun%-example.com。
-
-
-
-
許可するメソッドのパラメーターを設定し、OK をクリックします。
パラメーター
例
[実行内容]
追加
[応答ヘッダー]
Access-Control-Allow-Methods
[応答ヘッダー値]
GET、POST、PUT
説明複数のメソッドはカンマ (,) で区切ります。
[重複の許可]
[いいえ]
説明-
はい:重複ヘッダーを許可します。CDN POP は、オリジンサーバーのヘッダーを保持し、同じ名前の新しいヘッダーを追加します。
-
いいえ:重複ヘッダーを禁止します。CDN POP は、オリジンサーバーのヘッダーを新しいヘッダーで上書きします。
このトピックでは、重複を許可しない例を使用しています。実際の実装は、ご利用の環境によって異なる場合があります。
-
設定例
例 1
オリジン間リソース共有のレスポンスヘッダー値が単一の値または複数の値 (複数の値はカンマで区切られます) に設定されている場合
-
リクエストヘッダーの「Origin」パラメーターの値が設定された値のいずれかと完全に一致する場合、サーバーは対応するオリジン間ヘッダーで応答します。
-
完全一致がない場合、レスポンスに CORS ヘッダーは含まれません。
ApsaraVideo VOD コンソールで、Access-Control-Allow-Origin を http://example.com,https://aliyundoc.com に設定します。
-
ユーザーリクエストの
Originヘッダーがhttp://example.comの場合、CDN/ の POP (ポイントオブプレゼンス) はAccess-Control-Allow-Origin: http://example.comを返します。 -
ユーザーリクエストの
Originヘッダーがhttps://aliyundoc.comの場合、CDN/ ノードはAccess-Control-Allow-Origin: https://aliyundoc.comを返します。 -
CDN/ ノードは、Origin ヘッダーが
http://aliyundoc.comのユーザーリクエストには応答しません (プロトコルの不一致:ユーザーリクエストは HTTP を使用していますが、CDN/ は HTTPS 用に設定されています)。 -
リクエストの
Originヘッダーがhttp://aliyun.comの場合、CDN/ の POP は応答しません (ドメインの不一致)。
例 2
Access-Control-Allow-Origin レスポンスヘッダーがワイルドカードドメイン名に設定されている場合、リクエストヘッダーの Origin 値がワイルドカードドメイン名と一致するかどうかを検証します。
ApsaraVideo VOD コンソールで、Access-Control-Allow-Origin を http://*.aliyundoc.com に設定します。
-
ユーザーリクエストに Origin ヘッダー
http://demo.aliyundoc.comが含まれている場合、CDN/ の POP はAccess-Control-Allow-Origin: http://demo.aliyundoc.comを返します。 -
リクエストの Origin ヘッダーが
http://demo.example.comの場合、ドメイン名が一致しないため、CDN/ の POP は応答しません。 -
CDN/ ノードは、Origin ヘッダーが
https://demo.aliyundoc.comのユーザーリクエストには応答しません。これは、リクエストが HTTPS プロトコルを使用しているのに対し、CDN/ が HTTP プロトコルで設定されているためです。