All Products
Search
Document Center

Object Storage Service:Berbagi sumber daya lintas asal (CORS) (PHP SDK V1)

Last Updated:Nov 30, 2025

Berbagi sumber daya lintas asal (Cross-Origin Resource Sharing/CORS) memungkinkan aplikasi web mengakses resource dari origin yang berbeda. Object Storage Service (OSS) menyediakan operasi API untuk mengontrol izin akses lintas asal.

Perhatian

  • Pada topik ini, titik akhir publik wilayah China (Hangzhou) digunakan. Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk detail wilayah dan titik akhir yang didukung, lihat Regions and endpoints.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Create an OssClient.

  • Untuk menetapkan aturan CORS, Anda harus memiliki izin oss:PutBucketCors. Untuk mengambil aturan CORS, Anda harus memiliki izin oss:GetBucketCors. Untuk menghapus aturan CORS, Anda harus memiliki izin oss:DeleteBucketCors. Untuk informasi selengkapnya, lihat Grant custom permissions to a RAM user.

Tetapkan aturan CORS

Kode berikut menunjukkan cara menetapkan aturan CORS untuk bucket examplebucket.

<?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';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
use OSS\Model\CorsConfig;
use OSS\Model\CorsRule;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
$provider = new EnvironmentVariableCredentialsProvider();
// Setel endpoint ke Endpoint wilayah bucket Anda. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Setel bucket ke nama bucket Anda, misalnya examplebucket.
$bucket= "examplebucket";

$corsConfig = new CorsConfig();
$rule = new CorsRule();
// Tetapkan header respons yang diizinkan untuk permintaan lintas asal. Anda dapat menetapkan beberapa nilai AllowedHeader. Setiap nilai dapat berisi paling banyak satu karakter wildcard asterisk (*).
// Tetapkan AllowedHeader ke asterisk (*) jika tidak ada persyaratan khusus.
$rule->addAllowedHeader("*");
// Tetapkan header respons yang dapat diakses pengguna dari aplikasi. Anda dapat menetapkan beberapa nilai ExposeHeader. Karakter wildcard asterisk (*) tidak didukung dalam ExposeHeader.
$rule->addExposeHeader("x-oss-header");
// Tetapkan origin yang diizinkan untuk permintaan lintas asal. Anda dapat menetapkan beberapa nilai AllowedOrigin. Setiap nilai dapat berisi paling banyak satu karakter wildcard asterisk (*).
$rule->addAllowedOrigin("https://example.com:8080");
$rule->addAllowedOrigin("https://*.aliyun.com");
// Untuk mengizinkan permintaan dari semua origin, tetapkan AllowedOrigin ke asterisk (*).
//$rule->addAllowedOrigin("*");
// Tetapkan metode yang diizinkan untuk permintaan lintas asal.
$rule->addAllowedMethod("POST");
// Tetapkan durasi cache untuk respons permintaan preflight (OPTIONS). Satuannya adalah detik.
$rule->setMaxAgeSeconds(10);
// Maksimal 10 aturan dapat ditambahkan ke setiap bucket.
$corsConfig->addRule($rule);
// Tentukan apakah header Vary: Origin dikembalikan. Jika diatur ke false, header Vary: Origin tidak pernah dikembalikan.
$corsConfig->setResponseVary(false);

try{
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

    // Aturan yang ada akan ditimpa.
    $ossClient->putBucketCors($bucket, $corsConfig);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");            

Ambil aturan CORS

Kode berikut menunjukkan cara mengambil aturan CORS dari bucket examplebucket.

<?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';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;

try {
    // Dapatkan kredensial akses dari variabel lingkungan dan simpan dalam provider. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
    $provider = new EnvironmentVariableCredentialsProvider();
    // Setel endpoint ke Endpoint wilayah bucket Anda. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // Setel bucket ke nama bucket Anda, misalnya examplebucket.
    $bucket= "examplebucket";
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"        
    );
    $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("Allowed Methods :" .$method . PHP_EOL);
            }

        }
        if($rule->getAllowedOrigins()){
            foreach($rule->getAllowedOrigins() as $origin){
                printf("Allowed Origins :" .$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");
    return;
}

Hapus aturan CORS

Kode berikut menunjukkan cara menghapus semua aturan CORS dari bucket examplebucket.

<?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';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
$provider = new EnvironmentVariableCredentialsProvider();
// Setel endpoint ke Endpoint wilayah bucket Anda. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Setel bucket ke nama bucket Anda, misalnya examplebucket.
$bucket= "examplebucket";

try{
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

    $ossClient->deleteBucketCors($bucket);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");            

Referensi

  • Untuk kode contoh lengkap tentang pengelolaan aturan CORS, lihat GitHub.

  • Untuk informasi selengkapnya tentang operasi API untuk menetapkan aturan CORS, lihat PutBucketCors.

  • Untuk informasi selengkapnya tentang operasi API untuk mengambil aturan CORS, lihat GetBucketCors.

  • Untuk informasi selengkapnya tentang operasi API untuk menghapus aturan CORS, lihat DeleteBucketCors.