最近、サークルの授業で Phaser を使った小さなゲームの作り方を教えているのですが、受講生が CodePen で使う素材がたくさんあります。そのため、素材を置くのに CORS に対応したストレージが必要になりました。いろいろ考えているうちに、安く、しかも自分のドメインを紐付けられる Google Cloud Storage を思いつきました!
Google Cloud Storage は、初期設定では Cross-Origin Resource Sharing(CORS)に対応していません。ただし、gsutil(Google Cloud Storage の CLI ツール)を使えば、指定したバケットで CORS を有効にできます!
CORS は、JavaScript が異なるドメインのリソースにアクセスできるようにする仕組みです。かつての JSONP と同じ目的ですが、CORS は現在の業界標準であり、主要なブラウザはすべて対応しています。まず、gsutil をインストールして設定してください。公式チュートリアル Install the latest Cloud Tools version を参照できます。
次のコマンドで、指定したバケットに対して、指定したドメインまたは全員がリソースにアクセスできるように設定できます。設定が反映されない場合は、別のパソコンを使うか、シークレットウィンドウで試してください。私は一度設定してもうまくいかず、パケットを取得して確認したところ、ヘッダーには確かに CORS が有効になっていました。最終的に、原因は Chrome のキャッシュだと分かりました……キャッシュは本当に強力ですね……
gsutil cors set cors.config.json gs://s.ntustcoding.club
cors.config.json の内容は次のとおりです:
[
{
"origin": ["http://example.appspot.com"],
"responseHeader": ["Content-Type"],
"method": ["GET", "HEAD", "DELETE"],
"maxAgeSeconds": 3600
}
]最も重要なのは origin フィールドです。リソースへのアクセスを許可するドメインは複数設定できますし、* にすると全員がアクセスできるようになります。
参考:Google Cloud Storage - Cross-Origin Resource Sharing (CORS)