Tous les produits
Search
Centre de documentation

Object Storage Service:Partage CORS avec le SDK OSS pour Go 2.0

Dernière mise à jour :Sep 24, 2026

En raison de la politique d'origine unique des navigateurs, les requêtes cross-origin peuvent être rejetées lors de l'échange de données ou du partage de ressources entre différents noms de domaine. Cette rubrique explique comment résoudre ces problèmes en configurant des règles de partage de ressources cross-origin (CORS). Vous pouvez ainsi spécifier les domaines autorisés à envoyer des requêtes, les méthodes utilisables pour les requêtes cross-origin et les en-têtes acceptés.

Remarques sur l'utilisation

  • L'exemple de code présenté dans cette rubrique utilise l'ID de région cn-hangzhou correspondant à la région Chine (Hangzhou). Par défaut, l'endpoint public est utilisé pour accéder aux ressources d'un bucket. Si vous souhaitez accéder aux ressources du bucket via d'autres services Alibaba Cloud situés dans la même région que ce dernier, utilisez un endpoint interne. Pour plus d'informations sur les régions et endpoints pris en charge par OSS, consultez la page Régions et endpoints OSS.

  • Dans cette rubrique, les identifiants d'accès sont récupérés depuis des variables d'environnement. Pour savoir comment configurer vos identifiants d'accès, reportez-vous à la section Configurer les identifiants d'accès.

  • Pour configurer des règles CORS, vous devez disposer de l'autorisation oss:PutBucketCors. Pour interroger les règles CORS, l'autorisation oss:GetBucketCors est requise. Enfin, pour supprimer des règles CORS, vous devez détenir l'autorisation oss:DeleteBucketCors. Pour en savoir plus, consultez la rubrique Accorder une stratégie personnalisée aux utilisateurs RAM.

Exemple de code

Configurer des règles CORS

L'extrait de code suivant illustre la configuration de règles CORS pour un bucket spécifique.

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"
)

// Define global variables.
var (
	region     string // Region in which your bucket is located.
	bucketName string // Name of the bucket.
)

// Specify the init function used to initialize command line parameters.
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// Parse command line parameters.
	flag.Parse()

	// Check whether the name of the bucket is specified.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Check whether the region is specified.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Load the default configurations and specify the credential provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Create a request to configure the CORS rules for the bucket.
	request := &oss.PutBucketCorsRequest{
		Bucket: oss.Ptr(bucketName), // Name of the bucket.
		CORSConfiguration: &oss.CORSConfiguration{
			CORSRules: []oss.CORSRule{
				{
					AllowedOrigins: []string{"*"},             // Allow requests from all origins.
					AllowedMethods: []string{"PUT", "GET"},    // Allowed methods.
					AllowedHeaders: []string{"Authorization"}, // Allowed request headers.
				},
				{
					AllowedOrigins: []string{"http://example.com", "http://example.net"}, // Allow requests from specified origins.
					AllowedMethods: []string{"GET"},                                      // Allowed methods.
					AllowedHeaders: []string{"Authorization"},                            // Allowed request headers.
					ExposeHeaders:  []string{"x-oss-test", "x-oss-test1"},                // Exposed response headers.
					MaxAgeSeconds:  oss.Ptr(int64(100)),                                  // Maximum cache time. Unit: seconds.
				},
			},
			ResponseVary: oss.Ptr(false), // Whether to include the Vary header in the response.
		},
	}

	// Send the request to configure the CORS rules for the bucket.
	result, err := client.PutBucketCors(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket cors %v", err)
	}

	// Display the result.
	log.Printf("put bucket cors result:%#v\n", result)
}

Interroger les règles CORS

Le code ci-dessous montre comment récupérer les règles CORS existantes.

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"
)

// Define global variables.
var (
	region     string // Region in which your bucket is located.
	bucketName string // Name of the bucket.
)

// Specify the init function used to initialize command line parameters.
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// Parse command line parameters.
	flag.Parse()

	// Check whether the name of the bucket is specified.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Check whether the region is specified.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Load the default configurations and specify the credential provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Create a request to query the CORS configurations of the bucket.
	request := &oss.GetBucketCorsRequest{
		Bucket: oss.Ptr(bucketName), // Name of the bucket.
	}

	// Perform the query operation and process the result.
	getResult, err := client.GetBucketCors(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to get bucket cors %v", err)
	}

	// Display the result.
	log.Printf("get bucket cors result:%#v\n", getResult.CORSConfiguration.CORSRules)
}

Supprimer les règles CORS

Cet exemple de code permet de supprimer toutes les règles CORS configurées pour un bucket donné.

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"
)

// Define global variables.
var (
	region     string // Region in which your bucket is located.
	bucketName string // Name of the bucket.
)

// Specify the init function used to initialize command line parameters.
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// Parse command line parameters.
	flag.Parse()

	// Check whether the name of the bucket is specified.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Check whether the region is specified.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Load the default configurations and specify the credential provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Create a request to delete the CORS configurations.
	request := &oss.DeleteBucketCorsRequest{
		Bucket: oss.Ptr(bucketName), // Name of the bucket.
	}

	// Delete the CORS configurations and process the result.
	result, err := client.DeleteBucketCors(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to delete bucket cors %v", err)
	}

	// Display the result.
	log.Printf("delete bucket cors result:%#v\n", result)
}

Références

  • Pour consulter l'intégralité du code source relatif aux opérations CORS, rendez-vous sur les pages put_bucket_cors.go, get_bucket_cors.go et delete_bucket_cors.go.

  • Pour obtenir des détails sur l'opération API permettant de configurer les règles CORS, voir PutBucketCors.

  • La documentation de l'opération API dédiée à l'interrogation des règles CORS est disponible ici : GetBucketCORS.

  • Pour plus d'informations sur l'opération API servant à supprimer les règles CORS, consultez DeleteBucketCORS.