クロスオリジンリソース共有 (CORS) により、webアプリケーションは異なるオリジンに属するリソースにアクセスできます。 Object Storage Service (OSS) は、クロスオリジンアクセス制御のためのCORS API操作を提供します。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
CORSルールを設定するには、
oss:PutBucketCors
権限が必要です。 CORSルールを照会するには、oss:GetBucketCors
権限が必要です。 CORSルールを削除するには、oss:DeleteBucketCors
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
CORS ルールの設定
次のコードは、examplebucketという名前のバケットにCORSルールを設定する方法の例を示しています。
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
OSS\Credentials\EnvironmentVariableCredentialsProviderを使用します。OSS\OssClientを使用します。OSS\CoreOssExceptionを使用します。OSS\Model\CorsConfigを使用します。OSS\Model\CorsRuleを使用します。// 環境変数からアクセス資格情報を取得します。 コードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。 例: examplebucket.
$bucket= "examplebucket";
$corsConfig = new CorsConfig();
$rule = new CorsRule();
// クロスオリジンリクエストを許可するレスポンスヘッダーを指定します。 複数の許可されたヘッダーを指定できます。 許可されたヘッダーごとにワイルドカード文字として使用できるアスタリスク (*) は1つだけです。
// 特別な要件がない場合は、AllowedHeaderをアスタリスク (*) に設定することを推奨します。
$rule->addAllowedHeader("*");
// アプリケーションからアクセスできるレスポンスヘッダーを指定します。 複数の公開ヘッダーを指定できます。 公開ヘッダーにアスタリスク (*) を含めることはできません。
$rule->addExposeHeader("x-oss-header");
// クロスオリジンリクエストが送信される許可されたオリジンを指定します。 複数の許可されたオリジンを指定できます。 許可された各オリジンのワイルドカード文字として使用できるアスタリスク (*) は1つだけです。
$rule->addAllowedOrigin("https://example.com:8080");
$rule->addAllowedOrigin("https:// * .aliyun.com");
// AllowedOriginをアスタリスク (*) に設定すると、すべてのオリジンからのリクエストが許可されます。
//$rule->addAllowedOrigin("*");
// クロスオリジンリクエストが使用できるHTTPメソッドを指定します。
$rule->addAllowedMethod("POST");
// ブラウザが特定のリソースへのプリフライト (OPTIONS) 要求に対する応答をキャッシュできる時間を指定します。 単位は秒です。
$rule->setMaxAgeSeconds(10);
// バケットごとに最大10個のルールを追加できます。
$corsConfig->addRule($rule);
// Vary: Originヘッダーを返すかどうかを指定します。 値がfalseの場合、Vary: Originヘッダーが返されないことを示します。
$corsConfig->setResponseVary(false);
try {
$config=配列 (
"provider" => $provider、
"endpoint" => $end ポイント、
);
$ossClient = new OssClient($config);
// OSSは、リクエストで作成するCORSルールと同じ名前の既存のCORSルールを上書きします。
$ossClient->putBucketCors($bucket、$corsConfig);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage()) 。 "\n");
戻ります。}
print(__FUNCTION__) 。 ": OK" 。 "\n");
CORSルールの照会
次のコードは、examplebucketという名前のバケットに設定されたCORSルールを照会する方法の例を示しています。
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
OSS\Credentials\EnvironmentVariableCredentialsProviderを使用します。OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。try {
// 環境変数からアクセス資格情報を取得し、プロバイダーに資格情報を保存します。 コードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。 例: examplebucket.
$bucket= "examplebucket";
$config=配列 (
"provider" => $provider、
"endpoint" => $end ポイント、
);
$ossClient = new OssClient($config);
$corsConfig = $ossClient->getBucketCors($bucket);
if ($corsConfig->getResponseVary()){
printf("Response Vary : true" .PHP_EOL);
}else{
printf("Response Vary : false" .PHP_EOL);
}
foreach ($corsConfig->getRules() as $key => $rule){
if($rule->getAllowedHeaders()){
foreach($rule->getAllowedHeaders() as $header){
printf("Allowed Headers :" .$header .PHP_EOL);
}
}
if ($rule->getAllowedMethods()){
foreach($rule->getAllowedMethods() as $method){
printf("許可されたメソッド:" .$method. PHP_EOL);
}
}
if($rule->getAllowedOrigins()){
foreach($rule->getAllowedOrigins() as $origin){
printf("許可された起源:" .$origin、PHP_EOL);
}
}
if($rule->getExposeHeaders()){
foreach($rule->getExposeHeaders() as $exposeHeader){
printf("Expose Headers :" .$exposeHeader. PHP_EOL);
}
}
printf("Max Age Seconds :" .$rule->getMaxAgeSeconds() .PHP_EOL);
}
} catch (OssException $e) {
printf($e->getMessage()) 。 "\n");
戻ります。}
CORS ルールの削除
次のコードは、examplebucketという名前のバケットに設定されたすべてのCORSルールを削除する方法の例を示しています。
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
OSS\Credentials\EnvironmentVariableCredentialsProviderを使用します。OSS\OssClientを使用します。OSS\CoreOssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 コードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。 例: examplebucket.
$bucket= "examplebucket";
try {
$config=配列 (
"provider" => $provider、
"endpoint" => $end ポイント、
);
$ossClient = new OssClient($config);
$ossClient->deleteBucketCors($bucket);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage()) 。 "\n");
戻ります。}
print(__FUNCTION__) 。 ": OK" 。 "\n");
参考資料
CORSの完全なサンプルコードについては、『GitHub』をご参照ください。
CORSルールを設定するために呼び出すことができるAPI操作の詳細については、「PutBucketCors」をご参照ください。
CORSルールを照会するために呼び出すAPI操作の詳細については、「GetBucketCors」をご参照ください。
CORSルールを削除するために呼び出すことができるAPI操作の詳細については、「DeleteBucketCors」をご参照ください。