Tous les produits
Search
Centre de documentation

Object Storage Service:Partage de ressources cross-origin (Go SDK V1)

Dernière mise à jour :Sep 22, 2026

En raison de la politique de même origine des navigateurs, les requêtes cross-origin peuvent être rejetées lors d'échanges de données ou de partage de ressources entre différents noms de domaine. Pour résoudre ce problème, vous pouvez configurer des règles de partage de ressources cross-origin (CORS). Dans ces règles CORS, spécifiez les noms de domaine autorisés à envoyer des requêtes, les méthodes utilisables pour les requêtes cross-origin et les en-têtes autorisés.

Notes

  • Cette rubrique utilise l'endpoint public de la région Chine (Hangzhou). Si vous souhaitez accéder à OSS depuis d'autres services Alibaba Cloud situés dans la même région qu'OSS, utilisez un endpoint interne. Pour plus d'informations sur les régions et les endpoints OSS, consultez Régions et endpoints.

  • Dans cette rubrique, les identifiants d'accès sont obtenus à partir des variables d'environnement. Pour savoir comment configurer les identifiants d'accès, consultez Configurer les identifiants d'accès.

  • Cette rubrique illustre la création d'une instance OSSClient avec un endpoint OSS. Pour d'autres configurations, telles que l'utilisation d'un domaine personnalisé ou l'authentification via des identifiants du Security Token Service (STS), consultez Configurer un client (Go SDK V1).

  • Pour configurer des règles CORS, vous devez disposer de l'autorisation oss:PutBucketCors. Pour interroger les règles CORS, vous devez disposer de l'autorisation oss:GetBucketCors. Pour supprimer des règles CORS, vous devez disposer de l'autorisation oss:DeleteBucketCors. Pour plus d'informations, consultez Accorder une politique personnalisée.

Exemple de code

Définir des règles CORS

L'exemple de code suivant montre comment configurer une règle CORS pour un bucket spécifique :

package main

import (
	"log"

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

func main() {
	// Set bucketName to the name of your bucket.
	bucketName := "yourBucketName"

	// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// Create an OSSClient instance.
	// Set yourEndpoint to the Endpoint of the bucket. For example, for a bucket in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, use the actual Endpoint.
	// Set yourRegion to the region where the bucket is located. For example, for a bucket in the China (Hangzhou) region, set the region to cn-hangzhou. For other regions, use the actual region.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Set the signature version.
	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

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

	log.Println("Set Success")
}

Obtenir des règles CORS

L'exemple de code suivant montre comment interroger les règles CORS d'un bucket spécifique :

package main

import (
	"log"

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

func main() {
	// Set bucketName to the name of your bucket.
	bucketName := "yourBucketName"

	// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// Create an OSSClient instance.
	// Set yourEndpoint to the Endpoint of the bucket. For example, for a bucket in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, use the actual Endpoint.
	// Set yourRegion to the region where the bucket is located. For example, for a bucket in the China (Hangzhou) region, set the region to cn-hangzhou. For other regions, use the actual region.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Set the signature version.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

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

	// Print the CORS rules.
	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)
	}
}

Supprimer des règles CORS

L'exemple de code suivant montre comment supprimer toutes les règles CORS d'un bucket spécifique :

package main

import (
	"log"

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

func main() {
	// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// Create an OSSClient instance.
	// Set yourEndpoint to the Endpoint of the bucket. For example, for a bucket in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, use the actual Endpoint.
	// Set yourRegion to the region where the bucket is located. For example, for a bucket in the China (Hangzhou) region, set the region to cn-hangzhou. For other regions, use the actual region.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Set the signature version.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	// Set bucketName to the name of the bucket, for example, examplebucket.
	bucketName := "examplebucket"

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

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

Références

  • Pour l'exemple de code complet relatif aux CORS, consultez Exemple GitHub.

  • Pour plus d'informations sur l'opération API utilisée pour définir des règles CORS, consultez SetBucketCORSV2.

  • Pour plus d'informations sur l'opération API utilisée pour récupérer les règles CORS, consultez GetBucketCORS.

  • Pour plus d'informations sur l'opération API utilisée pour supprimer des règles CORS, consultez DeleteBucketCORS.