全部产品
Search
文档中心

Object Storage Service:Konfigurasi Berbagi Sumber Daya Lintas Asal (CORS)

更新时间:Nov 09, 2025

Saat sebuah situs web memuat sumber daya dari Object Storage Service (OSS), browser dapat melaporkan kesalahan "diblokir oleh kebijakan CORS". Kesalahan ini disebabkan oleh kebijakan asal sama pada browser, yang membatasi halaman web untuk mengakses sumber daya hanya dari protokol, nama domain, dan port yang sama. Sebagai contoh, halaman di https://www.example.com tidak dapat langsung mengakses sumber daya OSS dari domain lain, seperti https://example-bucket.oss-cn-hangzhou.aliyuncs.com/test.jpg.imageAnda dapat mengonfigurasi aturan berbagi sumber daya lintas asal (CORS) untuk bucket OSS Anda guna memberikan izin kepada situs web tertentu untuk secara aman mengakses sumber daya OSS Anda. Hal ini memungkinkan halaman web berinteraksi langsung dengan objek.

Cara kerjanya

Permintaan CORS dikategorikan sebagai permintaan sederhana atau permintaan preflight. Permintaan sederhana dikirim langsung, sedangkan permintaan preflight harus mendapatkan izin terlebih dahulu sebelum permintaan utama dapat dikirim.

Permintaan preflight diperlukan jika salah satu dari kondisi berikut terpenuhi:

  • Permintaan menggunakan metode selain GET, HEAD, atau POST.

  • Permintaan menggunakan metode POST dengan Content-Type selain text/plain, application/x-www-form-urlencoded, atau multipart/form-data.

  • Permintaan mencakup header kustom, seperti x-oss-*.

Ketika browser mengirim permintaan sederhana ke OSS, proses berikut terjadi:

  1. Browser menambahkan header Origin ke permintaan. Header Origin menentukan asal halaman yang memulai permintaan, misalnya, Origin: https://www.example.com.

  2. OSS membandingkan metode HTTP dari permintaan dan nilai header Origin dengan konfigurasi CORS dari bucket tujuan untuk menemukan item yang cocok. Jika ada kecocokan, OSS menyertakan header Access-Control-Allow-Origin dalam respons. Header Access-Control-Allow-Origin berisi nilai header Origin dari permintaan awal.

  3. Browser menerima respons dan memeriksa apakah nilai header Access-Control-Allow-Origin sesuai dengan domain permintaan asli. Permintaan berhasil jika mereka cocok. Permintaan gagal jika tidak cocok atau jika header Access-Control-Allow-Origin tidak disertakan dalam respons.

Permintaan preflight pertama melakukan langkah-langkah berikut. Jika berhasil, kemudian melanjutkan dengan proses yang sama seperti permintaan sederhana:

  1. Browser mengirimkan permintaan OPTIONS yang mencakup metode (Access-Control-Request-Method) dan header (Access-Control-Request-Headers) dari permintaan utama yang dimaksudkan.

  2. OSS memeriksa apakah metode dan header dalam permintaan diizinkan berdasarkan konfigurasi CORS. Jika metode atau nilai header apa pun dalam permintaan preflight tidak termasuk dalam set metode dan header yang diizinkan untuk sumber daya tujuan, permintaan gagal, dan permintaan utama tidak dikirim.

Memuat sumber daya situs web statis

Situs web di https://www.example.com perlu memuat gambar, CSS, dan file JS yang disimpan di bucket OSS.

Langkah 1: Konfigurasikan Aturan CORS

Masuk ke Konsol OSS. Buka halaman Data Security > CORS Settings untuk bucket tujuan dan buat aturan berikut:

Parameter

Nilai

Deskripsi

Asal

https://www.example.com

Membatasi permintaan ke situs web spesifik ini untuk memastikan keamanan sumber daya.

Metode yang Diizinkan

GET, HEAD

GET mengunduh sumber daya, dan HEAD memvalidasi cache.

Header yang Diizinkan

Biarkan kosong

Skenario ini melibatkan permintaan sederhana yang tidak memicu permintaan preflight, jadi parameter ini tidak digunakan. Biarkan kosong.

Header yang Diekspos

ETag, Content-Length

  • ETag: Memungkinkan browser memvalidasi cache dengan permintaan HEAD. Jika file tidak berubah, server mengembalikan 304 Not Modified untuk mencegah pengunduhan ulang.

  • Content-Length: Dapat digunakan untuk menampilkan kemajuan pemuatan sumber daya di antarmuka depan.

Waktu Habis Cache

86400

Meng-cache respons preflight selama 24 jam untuk mengurangi potensi permintaan preflight di masa mendatang.

Mengembalikan Header Vary: Origin.

Tidak dicentang

Karena asalnya tunggal dan spesifik, opsi ini tidak diperlukan untuk menangani masalah caching multi-domain.

Langkah 2: Verifikasi Konfigurasi

Kunjungi https://www.example.com dan pastikan sumber daya OSS seperti gambar dimuat dengan benar tanpa kesalahan CORS di konsol browser.

Unggah file langsung dari antarmuka depan

Pengguna di halaman web https://app.example.com dapat mengunggah file seperti foto profil dan dokumen langsung ke OSS.

Langkah 1: Konfigurasikan Aturan CORS

Masuk ke Konsol OSS. Buka halaman Data Security > CORS Settings untuk bucket tujuan dan buat aturan berikut:

Parameter

Nilai

Deskripsi

Origin

https://app.example.com

Memastikan bahwa hanya aplikasi yang berwenang ini yang memiliki izin untuk melakukan unggahan.

Metode yang Diizinkan

PUT, POST

PUT atau POST adalah metode HTTP yang diperlukan untuk melakukan operasi unggah.

Header yang Diizinkan

*

Keamanan untuk unggahan langsung dari antarmuka depan bergantung pada tanda tangan sementara, seperti Token Layanan Keamanan (STS) atau URL yang ditandatangani, bukan header Authorization tetap. Menggunakan * mengakomodasi berbagai header yang dikirim oleh kit pengembangan perangkat lunak (SDK), seperti x-oss-meta-*. Ini menyederhanakan konfigurasi tanpa memperkenalkan risiko keamanan.

Header yang Diekspos

ETag, x-oss-request-id

  • ETag: Pengidentifikasi unik untuk unggahan file yang berhasil, digunakan untuk verifikasi selanjutnya.

  • x-oss-request-id: Jika unggahan gagal, frontend dapat menangkap ID ini dan memberikannya untuk dukungan teknis untuk dengan cepat menemukan masalah.

Waktu Habis Cache

600

Operasi unggah kurang sering. Cache 10 menit mengurangi permintaan preflight sambil memungkinkan perubahan konfigurasi berlaku dengan cepat.

Kembalikan Header Vary: Origin

Tercentang

Mempersiapkan untuk potensi penyebaran multi-domain di masa depan, seperti lingkungan pengujian, dan mencegah pencemaran cache CDN.

Langkah 2: Verifikasi Konfigurasi

Lakukan operasi unggah di halaman https://app.example.com. Pastikan file berhasil diunggah ke OSS tanpa kesalahan CORS di konsol browser.

Dukung beberapa lingkungan

Beberapa subdomain untuk pengembangan, pengujian, dan produksi seperti dev.example.com dan app.example.com perlu mengakses sumber daya OSS yang sama.

Langkah 1: Konfigurasikan Aturan CORS

Masuk ke Konsol OSS. Buka halaman Data Security > CORS Settings untuk bucket tujuan dan buat aturan berikut:

Parameter

Nilai

Deskripsi

Origin

https://*.example.com

Menggunakan karakter wildcard * untuk memberikan otorisasi ke semua subdomain di bawah example.com yang menggunakan protokol HTTPS.

Metode yang Diizinkan

GET, PUT, POST

Mengizinkan baik membaca maupun mengunggah sumber daya untuk memenuhi kebutuhan pengujian di berbagai lingkungan.

Header yang Diizinkan

*

Lingkungan dan fitur yang berbeda dalam pengembangan mungkin memperkenalkan header kustom yang berbeda. Menggunakan * menghindari kebutuhan untuk sering memodifikasi aturan CORS.

Header yang Diekspos

ETag, x-oss-request-id

Mendukung validasi unduhan dan umpan balik hasil unggahan.

Waktu Habis Cache

3.600

Cache 1 jam memberikan fleksibilitas untuk beralih dan debugging di berbagai lingkungan.

Kembalikan Header Vary: Origin

Dicentang

Diperlukan. Ini menginstruksikan CDN untuk menyimpan respons berdasarkan header Origin, yang mencegah konflik cache antar lingkungan.

Langkah 2: Verifikasi Konfigurasi

Lakukan tes akses atau unggah di https://dev.example.com dan https://app.example.com untuk memastikan semua operasi berhasil.

Buat panggilan gaya API dengan otentikasi

Aplikasi antarmuka depan di https://api.example.com perlu mengakses sumber daya OSS yang dilindungi dengan menyertakan header kustom seperti Authorization.

Langkah 1: Konfigurasikan Aturan CORS

Masuk ke Konsol OSS. Buka halaman Data Security > CORS Settings untuk bucket tujuan dan buat aturan berikut:

Parameter

Nilai

Deskripsi

Origin

https://api.example.com

Untuk permintaan dengan informasi otentikasi, origin harus berupa domain tepercaya yang tepat.

Metode yang Diizinkan

GET, PUT, DELETE

Mendukung manajemen siklus hidup penuh untuk sumber daya pribadi, termasuk membaca, memperbarui, dan menghapus.

Header yang Diizinkan

authorization, content-type, x-oss-*

Jangan gunakan *. Daftarkan secara eksplisit semua header permintaan yang diperlukan. Ikuti prinsip hak istimewa minimal untuk menghindari mengekspos informasi header yang tidak perlu.

Header yang Diekspos

ETag, x-oss-request-id

Menyediakan pengenal verifikasi untuk operasi yang berhasil dan ID pemecahan masalah untuk kegagalan.

Waktu Habis Cache

600

Untuk permintaan terotentikasi, waktu cache preflight yang lebih pendek (10 menit) membantu menerapkan perubahan kebijakan keamanan dengan lebih cepat.

Kembalikan Header Vary: Origin

Dicentang

Menginstruksikan CDN untuk menyimpan respons secara terpisah untuk origin yang berbeda untuk menghindari kebingungan.

Langkah 2: Verifikasi Konfigurasi

Inisiasi permintaan dengan header Authorization dari halaman https://api.example.com dan pastikan Anda dapat mengakses sumber daya OSS yang dilindungi.

Penggunaan di Lingkungan Produksi

Praktik terbaik keamanan

Ikuti prinsip hak istimewa minimal.

  • Konfigurasikan Origin (AllowedOrigin) dengan tepat: Kecuali jika bucket Anda sepenuhnya publik, jangan atur AllowedOrigin ke *. Tentukan nama domain situs web yang spesifik, seperti https://www.example.com.

  • Batasi Allowed Methods (AllowedMethod): Paparkan hanya metode HTTP yang diperlukan untuk operasi bisnis Anda. Jika situs web Anda hanya memerlukan akses baca, konfigurasikan hanya GET dan HEAD.

  • Tentukan Allowed Headers (AllowedHeader) secara eksplisit: Untuk permintaan yang membawa informasi otentikasi, seperti header Authorization, hindari penggunaan *. Cantumkan semua header permintaan yang diperlukan secara eksplisit.

Praktik terbaik kinerja

  • Optimalkan cache preflight: Tetapkan nilai yang sesuai untuk Waktu Habis Cache (MaxAgeSeconds), seperti 86.400 detik (24 jam). Ini dapat mengurangi jumlah permintaan preflight secara signifikan, sehingga menurunkan latensi dan biaya permintaan.

  • Evaluasi dampak dari Vary: Origin: Mengaktifkan Vary: Origin membantu mencegah polusi cache, tetapi meningkatkan kompleksitas caching CDN. Hal ini dapat menyebabkan rasio hit cache yang lebih rendah serta peningkatan lalu lintas kembali ke asal, yang berpotensi menambah biaya dan latensi. Gunakan opsi ini hanya setelah melakukan evaluasi menyeluruh.

Skenario Akselerasi CDN

Jika bucket Anda dipercepat oleh CDN dan diakses melalui nama domain CDN, permintaan lintas asal pertama kali mencapai titik kehadiran (PoP) CDN. Dalam situasi ini, konfigurasikan aturan CORS di konsol CDN, bukan di konsol OSS. Konfigurasi CORS di OSS hanya berlaku untuk permintaan yang dibuat langsung ke nama domain asal OSS. Untuk informasi lebih lanjut, lihat Konfigurasikan Berbagi Sumber Daya Lintas Asal.

Parameter Aturan CORS

Anda dapat mengonfigurasi hingga 20 aturan CORS untuk setiap bucket. OSS mengevaluasi aturan secara berurutan dari atas ke bawah dan menerapkan aturan pertama yang cocok dengan permintaan. Setelah menemukan kecocokan, OSS tidak akan memeriksa aturan berikutnya.

Parameter

Wajib

Deskripsi

Asal (AllowedOrigin)

Ya

Menentukan situs web (domain asal) yang diizinkan untuk membuat permintaan lintas asal ke sumber daya OSS.

  • Formatnya adalah protokol://domain[:port]. Contoh: https://www.example.com.

  • Karakter wildcard * didukung, tetapi Anda hanya dapat menggunakannya sekali dalam setiap origin.

    • Contoh valid: https://*.example.com atau http://localhost:*

    • Contoh tidak valid: https://*.example.* atau https://*

  • Beberapa asal diizinkan, satu per baris.

Metode yang Diizinkan (AllowedMethod)

Ya

Menentukan metode HTTP yang diizinkan.

  • Nilai valid: GET, PUT, POST, DELETE, HEAD.

  • Beberapa metode diizinkan.

Header yang Diizinkan (AllowedHeader)

Tidak

Berlaku untuk permintaan preflight dan menentukan header HTTP mana yang dapat disertakan dalam permintaan sebenarnya.

  • Karakter wildcard * didukung, yang mengizinkan semua header.

  • Beberapa header diizinkan, satu per baris. Header bersifat case-insensitive.

Header yang Diekspos (ExposeHeader)

Tidak

Menentukan header respons OSS mana yang dapat diakses oleh kode JavaScript sisi klien.

  • Karakter wildcard * tidak didukung.

  • Beberapa header diizinkan, satu per baris.

  • Cara Penggunaan: Untuk mendapatkan ETag atau x-oss-request-id dari file yang diunggah di JavaScript, Anda harus menambahkan ETag dan x-oss-request-id di sini.

Waktu Habis Cache (MaxAgeSeconds)

Tidak

Menentukan waktu dalam detik bahwa browser dapat menyimpan hasil permintaan preflight OPTIONS.

  • Efek: Selama periode validitas cache, permintaan lintas asal identik berikutnya untuk sumber daya yang sama tidak memicu permintaan preflight baru. Ini mengoptimalkan performa.

Vary: Asal

Tidak

Menentukan apakah akan menambahkan header Vary: Origin ke respons. Header ini memberi tahu cache perantara, seperti CDN, untuk menyimpan versi berbeda dari sumber daya berdasarkan header Origin dari permintaan. Ini menghindari masalah polusi cache saat beberapa origin mengakses sumber daya.

  • Cara Penggunaan: Saat Anda mengonfigurasi beberapa nama domain atau wildcard untuk Origin, Anda harus mengaktifkan opsi ini untuk mencegah polusi cache.

Penting

Mengaktifkan opsi ini dapat menurunkan rasio hit cache CDN.

Pertanyaan Umum

Kesalahan: Tidak ada header 'Access-Control-Allow-Origin' pada sumber daya yang diminta.

Kesalahan ini biasanya terjadi karena browser menyimpan respons lama tanpa header CORS atau tidak ada aturan CORS yang sesuai dengan permintaan masuk.

Hapus cache browser Anda dan coba lagi. Jika kesalahan tetap muncul, ikuti langkah-langkah berikut untuk memeriksa apakah aturan CORS telah dikonfigurasi dengan benar:

  1. Masuk ke Konsol OSS.

  2. Klik Buckets, lalu pilih nama bucket tujuan.

  3. Di panel navigasi sebelah kiri, pilih Keamanan Data > Pengaturan CORS.

  4. Di halaman Pengaturan CORS, klik Buat Aturan.

  5. Di panel Buat Aturan CORS, atur Origin ke *, pilih semua Metode yang Diizinkan, atur Allowed Headers ke *, atur Exposed Headers ke ETag dan x-oss-request-id, atur Cache Timeout (Seconds) ke 0, pilih Vary: Origin, lalu klik OK.

  6. Jika masalah masih berlanjut, masuk ke server apa pun dan jalankan perintah berikut untuk melihat header permintaan lintas asal.

    curl -v -o output_file.txt -H 'Origin:[$URL2]' '[$URL1]'
    Catatan
    • [$URL1] adalah URL sumber daya OSS yang diminta.

    • [$URL2] adalah alamat origin yang Anda konfigurasikan dalam aturan CORS.

    Perintah tersebut mengembalikan output serupa.

    • Jika respons mencakup header CORS yang sesuai dengan konfigurasi Anda, kemungkinan besar masalah disebabkan oleh caching lokal. Browser mungkin telah menyimpan respons dari permintaan sebelumnya yang tidak termasuk header CORS yang benar. Saat permintaan lintas asal baru dibuat, browser menggunakan respons yang tersimpan, yang menyebabkan pemeriksaan gagal. Coba solusi berikut:

      • Tekan Ctrl+F5 di browser Anda untuk menghapus cache, lalu uji apakah masalah masih ada.

      • Atur Waktu Habis Cache untuk aturan CORS ke 0. Ini mencegah sumber daya disimpan di klien dan memaksa setiap permintaan untuk mengambil informasi otorisasi dari server.

        Catatan

        Anda dapat mengatur cache-control objek ke no-cache saat mengunggahnya. Untuk objek yang sudah diunggah, Anda dapat menggunakan ossutil untuk mengubah pengaturan ini. Untuk informasi lebih lanjut, lihat set-meta (kelola metadata objek).

      • Gunakan CDN untuk mempercepat OSS. Ini memastikan bahwa semua permintaan yang dilayani oleh CDN mengembalikan header CORS.

    • Jika respons berisi dua header CORS atau header yang tidak sesuai dengan konfigurasi OSS Anda, kemungkinan besar masalah disebabkan oleh penggunaan CDN untuk mempercepat OSS:

      1. Masuk ke Konsol CDN, nonaktifkan sementara akselerasi CDN untuk OSS, dan konfirmasikan bahwa masalah lintas asal terpecahkan.

      2. Setelah konfirmasi, klik nama domain tertentu, lalu klik Cache Configuration > HTTP Response Header.

      3. Atur header respons HTTP kustom sesuai kebutuhan.

  7. Jika masalah CORS masih belum terselesaikan, lihat Kesalahan umum dan solusi untuk berbagi sumber daya lintas asal OSS (CORS) untuk pemecahan masalah lebih lanjut.

Kesalahan: Header 'Access-Control-Allow-Origin' memiliki nilai '...' yang tidak sama dengan asal yang disediakan.

Server mengembalikan header Access-Control-Allow-Origin, tetapi nilainya tidak sesuai dengan Origin dari permintaan saat ini. Ini sering kali merupakan masalah caching. Saat Anda mengonfigurasi beberapa nama domain situs web untuk mengakses OSS, browser atau CDN mungkin menyimpan izin akses untuk satu situs web dan kemudian salah menyajikannya ke situs lain.

Aktifkan opsi Vary: Origin dalam aturan CORS Anda untuk mencegah konflik cache antara situs web yang berbeda. Sebagai alternatif, hapus cache browser Anda dan coba lagi.

Kesalahan: Respons terhadap permintaan preflight tidak melewati pemeriksaan kontrol akses: Nilai header 'Access-Control-Allow-Origin' dalam respons tidak boleh wildcard '*' ketika mode kredensial permintaan adalah 'include'.

Kesalahan ini terjadi karena kode frontend mengirimkan permintaan dengan kredensial, di mana Access-Control-Allow-Credentials adalah True, tetapi Access-Control-Allow-Origin dikonfigurasikan sebagai karakter wildcard *. Untuk alasan keamanan, browser melarang penggunaan karakter wildcard origin dalam kasus ini untuk mencegah domain apa pun mengakses sumber daya dan memperoleh informasi kredensial. Informasi ini mencakup data sensitif seperti cookie dan header Authorization.

  • Untuk menyertakan informasi Kredensial dalam header permintaan, ubah nilai Access-Control-Allow-Origin dari karakter wildcard * menjadi nama domain spesifik (misalnya, https://example.com).

  • Jika Anda tidak perlu menyertakan informasi Kredensial dalam header permintaan, Anda dapat mengatur xhr.withCredentials ke false dalam kode frontend Anda dan pastikan bahwa Access-Control-Allow-Credentials diatur ke false di sisi server.

Bagaimana cara saya memperbaiki pemuatan lintas asal lambat dari OSS?

Permintaan lintas asal adalah permintaan HTTP standar yang mencakup header Origin. Kecepatan pemuatan bergantung pada jalur jaringan fisik antara klien dan bucket OSS, bukan pada apakah permintaan itu lintas asal. Sebagai contoh, jika klien berada di China (Hong Kong) dan bucket berada di daratan Tiongkok, ini dianggap sebagai akses jarak jauh. Dalam hal ini, Anda dapat menggunakan endpoint akselerasi transfer OSS untuk mengoptimalkan jalur jaringan. Untuk informasi lebih lanjut, lihat Akselerasi Transfer.

Catatan

Akselerasi Transfer memungkinkan pelanggan di seluruh dunia menggunakan jaringan yang dioptimalkan untuk mentransfer data. Ini sangat meningkatkan kecepatan unggah dan unduh serta memastikan pengalaman akses yang baik bagi pengguna di berbagai wilayah.