ユーザーガイド > Webベースのデータソースの構成 > RESTデータソース > オリジン間リソース共有(CORS)
 
オリジン間リソース共有(CORS)
セキュリティ上の理由から、スクリプト内で開始されるオリジン間のHTTPリクエストはブラウザーで制限されます。通常、Webページには他のドメインのさまざまな種類のコンテンツを埋め込むことができます。ただしW3Cは、特定のアイテム(「制限付きリソース」)に対するオリジン間リクエストは、安全な方法でのみ行うことを推奨しています。このようなリソースには、埋め込みWebフォントやAJAX(XMLHttpRequest)APIが含まれます。
オリジン間リソース共有(CORS)は、明確に定義された安全な境界内で、あるドメインのブラウザーが別のドメインの制限付きリソースをリクエストできるようにするメカニズムです。TDVは、ChromeおよびFirefoxブラウザーでCORSをサポートし、http://www.w3.org/TR/cors/にあるCORSの推奨事項に従います。
TDVのパブリックRESTサービスの管理者は、次のセクションで説明するようにCORS環境を構成します。
CORS構成
クライアントは通常、プリフライトリクエストと実際のリクエストの2種類のリクエストを行います。
プリフライトリクエスト
プリフライトリクエストのテスト
実際のリクエスト
実際のリクエストのテスト
CORS構成
TDVは、構成パラメーターを使用してCORSを構成します。パラメーターは、[Administration(管理)] > [Configuration(構成)]ウィンドウの[Server(サーバー)] > [Web Services Interface (Webサービスインターフェイス)] > [CORS]にあります。これらのパラメーターについて、次の表で説明します。
構成パラメーター
コメント
[Allow Credentials(資格情報の許可)]
リソースが資格情報を使用したリクエストを許可するかどうかを示すブール値。TDVは常に資格情報を許可するため、デフォルト値はtrueです。
これがfalseの場合、CORSは無効になります。
[Allowed Headers(許可されるヘッダー)]
リソースにアクセスするときに指定できるHTTPヘッダーのカンマ区切りのリスト。デフォルト値は「X-Requested-With, Content-Type, Accept, Origin」です。
[Allowed Methods(許可されるメソッド)]
リソースにアクセスするときに使用できるHTTPメソッドのカンマ区切りのリスト。デフォルトのリストは「GET, POST, HEAD」です。
[Allowed Origins(許可されるオリジン)]
リソースにアクセスできるオリジンのカンマ区切りのリスト。
デフォルト値は*(すべてのオリジン)です。
[Chain Preflight(チェーンプリフライト)]
true(デフォルト)の場合、プリフライトリクエストは通常の処理(つまり、OPTIONリクエストとしての処理)のためにターゲットリソースにチェーンされます。それ以外の場合、フィルターでプリフライトが処理されます。
[Exposed Headers(公開されるヘッダー)]
クライアントに公開される可能性のあるHTTPヘッダーのカンマ区切りのリスト。デフォルト値は空のリストです。
[Preflight Max Age(プリフライトの最大有効期間)]
クライアントがプリフライトリクエストをキャッシュできる秒数。デフォルト値は1800秒(30分)です。
プリフライトリクエスト
プリフライトリクエストは、他のドメインのサーバーに、サポートしているHTTPリクエストメソッドを尋ねます。また、実際のリクエストでCookieまたはその他の認証データを送信する必要があるかどうかの指定も求めます。
プリフライトリクエストでは、OPTIONSメソッドを使用してHTTPリクエストを送信し、実際のリクエストを安全に送信できるかどうかを判断します。実際のリクエストで次のことを行う場合は、プリフライトリクエストが必要です。
PUTまたはDELETEメソッドを使用する
リクエストにカスタムヘッダー(bbなどのヘッダー)を設定する
プリフライトリクエストのテスト
cURLを使用してCORSプリフライトリクエストをデバッグできます。
CORSプリフライトリクエストをテストするには
1.cURLを使用してプリフライトリクエストを送信します。
curl -H "Origin: http://example.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
 
これは通常のCORSリクエストに似ていますが、追加されるものがあります。
- -Hフラグは、追加のプリフライトリクエストヘッダーをサーバーに送信します。
- -X OPTIONSフラグは、これがHTTP OPTIONSリクエストであることを示します。
2.必要に応じて、-Hフラグを使用して、User-Agentなどの追加ヘッダーを指定します。
プリフライトリクエストが成功した場合、レスポンスには次のレスポンスヘッダーが含まれています。
Access-Control-Allow-Origin
Access-Control-Allow-Methods
Access-Control-Allow-Headers
プリフライトリクエストが成功しなかった場合、次のいずれかが発生します。
上記の3つのレスポンスヘッダーが表示されません。
HTTPレスポンスが200ではありません。
実際のリクエスト
実際のリクエストには、HTTPリクエストメソッドと、他のドメインのサーバーが必要とするCookieまたはその他の認証が含まれます。実際のリクエストが単純なクロスサイトリクエストに該当する場合(以下のリストを参照)、プリフライトリクエストを事前に行う必要はありません。
単純なクロスサイトリクエストには、次の特徴があります。
GET、HEAD、またはPOSTのみを使用してサーバーにデータを送信します。
HTTPリクエストでカスタムヘッダーを設定しません。
HTTPリクエストで他のドメインのサーバーに送信されるデータのコンテンツタイプが次のいずれかです。
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
実際のリクエストが単純なリクエストに該当しない場合は、事前にプリフライトリクエストを送信する必要があります(「プリフライトリクエスト」を参照してください)。
実際のリクエストのテスト
CORSをサポートするサンプルのGoogle APIの代わりに、テストするURLを使用して、cURLで実際のCORSリクエストをデバッグできます。
実際のCORSリクエストをテストするには
1.cURLを使用して通常のCORSリクエストを送信します。
curl -H "Origin: http://example.com" \
https://www.googleapis.com/discovery/v1/apis?fields=
 
-H "Origin: http://example.com"フラグは、リクエストを行うサードパーティードメインの名前です。実際のドメインの名前に置き換えてください。
2.必要に応じて、--verboseフラグを使用してレスポンス全体を出力し、リクエストヘッダーとレスポンスヘッダーを確認できるようにします。
レスポンスには、Access-Control-Allow-Originレスポンスヘッダーが含まれている必要があります。