ブラウザの同一オリジンポリシーにより、異なるドメイン間でデータを交換したり、リソースを共有したりする際のクロスオリジンリクエストは拒否されます。この問題を解決するには、特定のドメイン名、メソッド、リクエストヘッダーからのアクセスを許可するオリジン間リソース共有 (CORS) ルールを設定します。
CORS ルールの設定
次のコードは、指定されたバケットに CORS ルールを設定する方法を示しています。
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# エンドポイントは中国 (杭州) リージョンを例として使用します。実際のリージョンに基づいてエンドポイントを指定してください。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケット名を指定します (例: examplebucket)。
bucket = client.get_bucket('examplebucket')
# CORS ルールを設定します。
bucket.cors = [
Aliyun::OSS::CORSRule.new(
# クロスオリジンリクエストで許可されるオリジンを指定します (例: http://example.com)。
:allowed_origins => ['http://example.com', 'http://example.net'],
# クロスオリジンリクエストで許可される HTTP メソッドを指定します (例: GET、PUT、DELETE、POST、HEAD)。
:allowed_methods => ['PUT', 'POST', 'GET'],
# OPTIONS プリフライトリクエストで許可されるヘッダーを指定します (例: x-oss-test)。
:allowed_headers => ['x-oss-test'],
# ユーザーがアプリケーションからアクセスできるレスポンスヘッダーを指定します。
:expose_headers => ['x-oss-test1'],
# 特定のリソースに対する OPTIONS プリフライトリクエストの結果のキャッシュ期間を指定します。単位は秒です。
:max_age_seconds => 100)
]CORS ルールの取得
次のコードは、バケットの CORS ルールを取得する方法を示しています。
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# エンドポイントは中国 (杭州) リージョンを例として使用します。実際のリージョンに基づいてエンドポイントを指定してください。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケット名を指定します (例: examplebucket)。
bucket = client.get_bucket('examplebucket')
cors = bucket.cors
puts cors.map(&:to_s)CORS ルールの削除
次のコードは、指定されたバケットのすべての CORS ルールを削除する方法を示しています。
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# エンドポイントは中国 (杭州) リージョンを例として使用します。実際のリージョンに基づいてエンドポイントを指定してください。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケット名を指定します (例: examplebucket)。
bucket = client.get_bucket('examplebucket')
bucket.cors = []関連ドキュメント
オリジン間リソース共有 (CORS) ルールの設定に使用される API 操作の詳細については、「PutBucketCors」をご参照ください。
詳細については、「GetBucketCors」をご参照ください。
オリジン間リソース共有 (CORS) ルールの削除の詳細については、「DeleteBucketCors」をご参照ください。