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.
Anda 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, atauPOST.Permintaan menggunakan metode
POSTdenganContent-Typeselaintext/plain,application/x-www-form-urlencoded, ataumultipart/form-data.Permintaan mencakup header kustom, seperti
x-oss-*.
Ketika browser mengirim permintaan sederhana ke OSS, proses berikut terjadi:
Browser menambahkan header
Originke permintaan. HeaderOriginmenentukan asal halaman yang memulai permintaan, misalnya,Origin: https://www.example.com.OSS membandingkan metode HTTP dari permintaan dan nilai header
Origindengan konfigurasi CORS dari bucket tujuan untuk menemukan item yang cocok. Jika ada kecocokan, OSS menyertakan headerAccess-Control-Allow-Origindalam respons. HeaderAccess-Control-Allow-Originberisi nilai headerOrigindari permintaan awal.Browser menerima respons dan memeriksa apakah nilai header
Access-Control-Allow-Originsesuai dengan domain permintaan asli. Permintaan berhasil jika mereka cocok. Permintaan gagal jika tidak cocok atau jika headerAccess-Control-Allow-Origintidak disertakan dalam respons.
Permintaan preflight pertama melakukan langkah-langkah berikut. Jika berhasil, kemudian melanjutkan dengan proses yang sama seperti permintaan sederhana:
Browser mengirimkan permintaan
OPTIONSyang mencakup metode (Access-Control-Request-Method) dan header (Access-Control-Request-Headers) dari permintaan utama yang dimaksudkan.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 |
| Membatasi permintaan ke situs web spesifik ini untuk memastikan keamanan sumber daya. |
Metode yang Diizinkan |
| 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 |
|
|
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 |
| Memastikan bahwa hanya aplikasi yang berwenang ini yang memiliki izin untuk melakukan unggahan. |
Metode yang Diizinkan |
| 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 |
Header yang Diekspos |
|
|
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 |
| Menggunakan karakter wildcard |
Metode yang Diizinkan |
| 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 |
Header yang Diekspos |
| 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 |
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 |
| Untuk permintaan dengan informasi otentikasi, origin harus berupa domain tepercaya yang tepat. |
Metode yang Diizinkan |
| Mendukung manajemen siklus hidup penuh untuk sumber daya pribadi, termasuk membaca, memperbarui, dan menghapus. |
Header yang Diizinkan |
| Jangan gunakan |
Header yang Diekspos |
| 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 aturAllowedOriginke*. Tentukan nama domain situs web yang spesifik, sepertihttps://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 hanyaGETdanHEAD.Tentukan
Allowed Headers (AllowedHeader)secara eksplisit: Untuk permintaan yang membawa informasi otentikasi, seperti headerAuthorization, 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), seperti86.400detik (24 jam). Ini dapat mengurangi jumlah permintaan preflight secara signifikan, sehingga menurunkan latensi dan biaya permintaan.Evaluasi dampak dari
Vary: Origin: MengaktifkanVary: Originmembantu 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.
|
Metode yang Diizinkan (AllowedMethod) | Ya | Menentukan metode HTTP yang diizinkan.
|
Header yang Diizinkan (AllowedHeader) | Tidak | Berlaku untuk permintaan preflight dan menentukan header HTTP mana yang dapat disertakan dalam permintaan sebenarnya.
|
Header yang Diekspos (ExposeHeader) | Tidak | Menentukan header respons OSS mana yang dapat diakses oleh kode JavaScript sisi klien.
|
Waktu Habis Cache (MaxAgeSeconds) | Tidak | Menentukan waktu dalam detik bahwa browser dapat menyimpan hasil permintaan preflight
|
Vary: Asal | Tidak | Menentukan apakah akan menambahkan header
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:
Di panel navigasi sebelah kiri, pilih Keamanan Data > Pengaturan CORS.
Di halaman Pengaturan CORS, klik Buat Aturan.
Di panel Buat Aturan CORS, atur Origin ke
*, pilih semua Metode yang Diizinkan, atur Allowed Headers ke*, atur Exposed Headers keETagdanx-oss-request-id, atur Cache Timeout (Seconds) ke 0, pilih Vary: Origin, lalu klik OK.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.
CatatanAnda 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:
Masuk ke Konsol CDN, nonaktifkan sementara akselerasi CDN untuk OSS, dan konfirmasikan bahwa masalah lintas asal terpecahkan.
Setelah konfirmasi, klik nama domain tertentu, lalu klik Cache Configuration > HTTP Response Header.
Atur header respons HTTP kustom sesuai kebutuhan.
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
Kredensialdalam header permintaan, ubah nilaiAccess-Control-Allow-Origindari karakter wildcard*menjadi nama domain spesifik (misalnya,https://example.com).Jika Anda tidak perlu menyertakan informasi
Kredensialdalam header permintaan, Anda dapat mengaturxhr.withCredentialskefalsedalam kode frontend Anda dan pastikan bahwaAccess-Control-Allow-Credentialsdiatur kefalsedi 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.
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.