全部产品
Search
文档中心

Object Storage Service:Berbagi sumber daya lintas asal (C++ SDK)

更新时间:Nov 30, 2025

Kebijakan asal sama (same-origin policy) pada browser menolak permintaan lintas asal (cross-origin requests) saat Anda bertukar data atau berbagi sumber daya antar domain yang berbeda. Untuk mengatasi masalah ini, Anda dapat mengonfigurasi aturan Berbagi Sumber Daya Lintas Asal (Cross-Origin Resource Sharing/CORS) yang mengizinkan akses dari nama domain, metode, dan header permintaan tertentu.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.

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

  • Untuk mengatur 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 Lampirkan kebijakan kustom ke RAM user.

Atur aturan berbagi sumber daya lintas asal

Kode berikut menunjukkan cara mengatur aturan CORS untuk bucket tertentu:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tetapkan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    SetBucketCorsRequest request(BucketName);

    /* Atur aturan CORS. */
    auto rule1 = CORSRule();
    /* Tentukan origin yang diizinkan untuk permintaan lintas asal. */
    rule1.addAllowedOrigin("http://example.com");
    /* Tentukan metode yang diizinkan untuk permintaan lintas asal (GET, PUT, POST, DELETE, atau HEAD). */
    rule1.addAllowedMethod("POST");
    /* Tentukan apakah header yang ditentukan oleh header Access-Control-Request-Headers dalam permintaan preflight (OPTIONS) diizinkan. */
    rule1.addAllowedHeader("*");
    /* Tentukan header respons yang dapat diakses pengguna dari aplikasi. */
    rule1.addExposeHeader("x-oss-test");
    /* Maksimal 10 aturan dapat ditentukan. */
    request.addCORSRule(rule1);

    auto rule2 = CORSRule();
    rule2.addAllowedOrigin("http://example.net");
    rule2.addAllowedMethod("GET");
    rule2.addExposeHeader("x-oss-test2");
    rule2.setMaxAgeSeconds(100);
    request.addCORSRule(rule2);

    auto outcome = client.SetBucketCors(request);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "SetBucketCors gagal" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Ambil aturan berbagi sumber daya lintas asal

Kode berikut menunjukkan cara mengambil aturan CORS dari bucket tertentu:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
    
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tetapkan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);


    /* Ambil aturan CORS. */
    auto outcome = client.GetBucketCors(BucketName);

    if (outcome.isSuccess()) {
        std::cout << "GetBucketCors berhasil" << std::endl;
        for (auto const rule : outcome.result().CORSRules()) {
            std::cout << "Daftar CORS Bucket:" << std::endl;
            for (auto const origin : rule.AllowedOrigins()) {
                std::cout << "Origin yang diizinkan:" << origin << std::endl;
            }
        }
    }
    else {
        /* Tangani pengecualian. */
        std::cout << "GetBucketCors gagal" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Hapus aturan berbagi sumber daya lintas asal

Kode berikut menunjukkan cara menghapus semua aturan CORS dari bucket tertentu:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
    
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tetapkan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);


    /* Hapus aturan CORS. */
    auto outcome = client.DeleteBucketCors(BucketName);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "DeleteBucketCors gagal" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Referensi

  • Untuk kode contoh lengkap mengenai berbagi sumber daya lintas asal, lihat contoh di GitHub.

  • Untuk informasi selengkapnya mengenai operasi API untuk mengatur aturan CORS, lihat PutBucketCors.

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

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