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 Konfigurasikan kredensial akses menggunakan OSS SDK untuk Python 1.0.
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 Inisialisasi.
Untuk mengatur aturan CORS, Anda harus memiliki izin
oss:PutBucketCors. Untuk mengambil aturan CORS, Anda harus memiliki izinoss:GetBucketCors. Untuk menghapus aturan CORS, Anda harus memiliki izinoss:DeleteBucketCors. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.
Atur aturan berbagi sumber daya lintas asal (CORS)
Kode berikut menunjukkan cara mengatur aturan CORS untuk bucket tertentu:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import BucketCors, CorsRule
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan Endpoint untuk wilayah tempat bucket Anda berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Catatan: Parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"
# Ganti yourBucketName dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
rule = CorsRule(allowed_origins=['*'],
allowed_methods=['GET', 'HEAD'],
allowed_headers=['*'],
max_age_seconds=1000)
# Aturan yang ada akan ditimpa.
bucket.put_bucket_cors(BucketCors([rule])) Ambil aturan berbagi sumber daya lintas asal (CORS)
Kode berikut menunjukkan cara mengambil aturan CORS dari bucket tertentu:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan Endpoint untuk wilayah tempat bucket Anda berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Catatan: Parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"
# Ganti yourBucketName dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
try:
cors = bucket.get_bucket_cors()
except oss2.exceptions.NoSuchCors:
print('cors is not set')
else:
for rule in cors.rules:
print('AllowedOrigins={0}'.format(rule.allowed_origins))
print('AllowedMethods={0}'.format(rule.allowed_methods))
print('AllowedHeaders={0}'.format(rule.allowed_headers))
print('ExposeHeaders={0}'.format(rule.expose_headers))
print('MaxAgeSeconds={0}'.format(rule.max_age_seconds)) Hapus aturan berbagi sumber daya lintas asal (CORS)
Kode berikut menunjukkan cara menghapus semua aturan CORS dari bucket tertentu:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan Endpoint untuk wilayah tempat bucket Anda berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Catatan: Parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"
# Ganti yourBucketName dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
bucket.delete_bucket_cors() Referensi
Untuk kode contoh lengkap mengenai CORS, 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.