All Products
Search
Document Center

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

Last Updated:Nov 29, 2025

Kebijakan asal sama (same-origin policy) pada browser menolak permintaan lintas asal 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

  • Topik ini menggunakan 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.

  • Topik ini memperoleh kredensial akses dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • Topik ini membuat instans OSSClient menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Konfigurasi klien (Go SDK V1).

  • 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 Pengguna RAM.

Kode contoh

Mengatur aturan CORS

Kode berikut menunjukkan cara mengatur aturan CORS untuk bucket tertentu:

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Setel bucketName ke nama bucket Anda.
	bucketName := "yourBucketName"

	// 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.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket tersebut. Misalnya, untuk bucket di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan Endpoint yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk bucket di wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	isTrue := true
	rule1 := oss.CORSRule{
		AllowedOrigin: []string{"*"},
		AllowedMethod: []string{"PUT", "GET", "POST"},
		AllowedHeader: []string{},
		ExposeHeader:  []string{},
		MaxAgeSeconds: 100,
	}

	rule2 := oss.CORSRule{
		AllowedOrigin: []string{"http://www.a.com", "http://www.b.com"},
		AllowedMethod: []string{"GET"},
		AllowedHeader: []string{"Authorization"},
		ExposeHeader:  []string{"x-oss-test-01", "x-oss-test-02"},
		MaxAgeSeconds: 100,
	}

	put := oss.PutBucketCORS{}
	put.CORSRules = []oss.CORSRule{rule1, rule2}
	put.ResponseVary = &isTrue

	// Atur aturan CORS.
	err = client.SetBucketCORSV2(bucketName, put)
	if err != nil {
		log.Fatalf("Error setting CORS rules: %v", err)
	}

	log.Println("Set Success")
}

Mendapatkan aturan CORS

Kode berikut menunjukkan cara mengambil aturan CORS dari bucket tertentu:

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Setel bucketName ke nama bucket Anda.
	bucketName := "yourBucketName"

	// 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.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket tersebut. Misalnya, untuk bucket di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan Endpoint yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk bucket di wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	// Ambil aturan CORS.
	corsRes, err := client.GetBucketCORS(bucketName)
	if err != nil {
		log.Fatalf("Error getting CORS rules: %v", err)
	}

	// Cetak aturan CORS.
	for _, rule := range corsRes.CORSRules {
		log.Printf("Cors Rules Allowed Origin: %v", rule.AllowedOrigin)
		log.Printf("Cors Rules Allowed Method: %v", rule.AllowedMethod)
		log.Printf("Cors Rules Allowed Header: %v", rule.AllowedHeader)
		log.Printf("Cors Rules Expose Header: %v", rule.ExposeHeader)
		log.Printf("Cors Rules Max Age Seconds: %d", rule.MaxAgeSeconds)
	}

	if corsRes.ResponseVary != nil {
		log.Printf("Cors Rules Response Vary: %t", *corsRes.ResponseVary)
	}
}

Menghapus aturan CORS

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

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 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.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket tersebut. Misalnya, untuk bucket di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan Endpoint yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk bucket di wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	// Setel bucketName ke nama bucket tersebut, misalnya examplebucket.
	bucketName := "examplebucket"

	// Hapus aturan CORS.
	err = client.DeleteBucketCORS(bucketName)
	if err != nil {
		log.Fatalf("Error deleting CORS rules: %v", err)
	}

	log.Println("Delete Bucket CORS Success")
}

Referensi

  • Untuk kode contoh lengkap mengenai CORS, lihat contoh di GitHub.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk mengatur aturan CORS, lihat SetBucketCORSV2.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk mengambil aturan CORS, lihat GetBucketCORS.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk menghapus aturan CORS, lihat DeleteBucketCORS.