全部产品
Search
文档中心

Object Storage Service:Berbagi sumber daya lintas asal (Go SDK V2)

更新时间:Nov 09, 2025

Kebijakan asal sama di browser mencegah permintaan lintas asal ketika data dipertukarkan atau sumber daya dibagikan antar nama domain yang berbeda. Topik ini menjelaskan cara menyelesaikan masalah lintas domain dengan menetapkan kebijakan akses lintas asal yang mengizinkan akses dari nama domain tertentu, menggunakan metode tertentu, dan dengan header permintaan tertentu.

Catatan penggunaan

  • Kode contoh dalam topik ini menggunakan wilayah China (Hangzhou) dengan ID cn-hangzhou sebagai contoh. Titik akhir publik digunakan secara default. Jika Anda ingin mengakses OSS dari produk Alibaba Cloud lainnya di wilayah yang sama, Anda dapat menggunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir OSS.

  • Contoh-contoh dalam topik ini menunjukkan cara memperoleh kredensial akses dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses.

  • Untuk menetapkan aturan lintas asal, Anda harus memiliki izin oss:PutBucketCors. Untuk menanyakan aturan lintas asal, Anda harus memiliki izin oss:GetBucketCors. Untuk menghapus aturan lintas asal, Anda harus memiliki izin oss:DeleteBucketCors. Untuk informasi lebih lanjut, lihat Berikan Kebijakan Akses Kustom kepada Pengguna RAM.

Kode contoh

Konfigurasikan aturan berbagi sumber daya lintas asal

Anda dapat menggunakan kode berikut untuk menetapkan aturan lintas asal untuk bucket tertentu.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk mengonfigurasi aturan CORS untuk bucket.
	request := &oss.PutBucketCorsRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		CORSConfiguration: &oss.CORSConfiguration{
			CORSRules: []oss.CORSRule{
				{
					AllowedOrigins: []string{"*"},             // Izinkan permintaan dari semua asal.
					AllowedMethods: []string{"PUT", "GET"},    // Metode yang diizinkan.
					AllowedHeaders: []string{"Authorization"}, // Header permintaan yang diizinkan.
				},
				{
					AllowedOrigins: []string{"http://example.com", "http://example.net"}, // Izinkan permintaan dari asal yang ditentukan.
					AllowedMethods: []string{"GET"},                                      // Metode yang diizinkan.
					AllowedHeaders: []string{"Authorization"},                            // Header permintaan yang diizinkan.
					ExposeHeaders:  []string{"x-oss-test", "x-oss-test1"},                // Header respons yang diekspos.
					MaxAgeSeconds:  oss.Ptr(int64(100)),                                  // Waktu cache maksimum dalam detik.
				},
			},
			ResponseVary: oss.Ptr(false), // Menentukan apakah akan menyertakan header Vary dalam respons.
		},
	}

	// Kirim permintaan untuk mengonfigurasi aturan CORS untuk bucket.
	result, err := client.PutBucketCors(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menempatkan cors bucket %v", err)
	}

	// Cetak hasil dari mengonfigurasi aturan CORS untuk bucket.
	log.Printf("hasil penempatan cors bucket:%#v\n", result)
}

Tanyakan aturan berbagi sumber daya lintas asal

Anda dapat menggunakan kode berikut untuk menanyakan aturan lintas asal.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menanyakan konfigurasi CORS bucket.
	request := &oss.GetBucketCorsRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
	}

	// Tanyakan konfigurasi CORS bucket dan proses hasilnya.
	getResult, err := client.GetBucketCors(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mendapatkan cors bucket %v", err)
	}

	// Cetak hasil dari menanyakan konfigurasi CORS bucket.
	log.Printf("hasil mendapatkan cors bucket:%#v\n", getResult.CORSConfiguration.CORSRules)
}

Hapus aturan berbagi sumber daya lintas asal

Anda dapat menggunakan kode berikut untuk menghapus semua aturan lintas asal dari bucket tertentu.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menghapus konfigurasi CORS bucket.
	request := &oss.DeleteBucketCorsRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
	}

	// Hapus konfigurasi CORS bucket dan proses hasilnya.
	result, err := client.DeleteBucketCors(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menghapus cors bucket %v", err)
	}

	// Cetak hasil dari menghapus konfigurasi CORS bucket.
	log.Printf("hasil penghapusan cors bucket:%#v\n", result)
}

Referensi

  • Untuk kode contoh lengkap untuk berbagi sumber daya lintas asal, lihat put_bucket_cors.go, get_bucket_cors.go, dan delete_bucket_cors.go.

  • Untuk informasi lebih lanjut tentang operasi API yang dapat Anda panggil untuk menetapkan aturan lintas asal, lihat PutBucketCors.

  • Untuk informasi lebih lanjut tentang operasi API yang dapat Anda panggil untuk menanyakan aturan lintas asal, lihat GetBucketCORS.

  • Untuk informasi lebih lanjut tentang operasi API yang dapat Anda panggil untuk menghapus aturan lintas asal, lihat DeleteBucketCORS.