Setelah menambahkan layanan ke Alibaba Cloud CDN, Anda dapat mengaktifkan akses lintas asal dengan mengonfigurasi header respons HTTP pada POP.
Apa itu berbagi sumber daya lintas asal?
Berbagi sumber daya lintas asal (CORS) adalah mekanisme standar yang memungkinkan halaman web mengakses sumber daya dari asal (domain, protokol, atau port) yang berbeda dari asalnya sendiri. Mekanisme ini menyediakan cara aman untuk mengizinkan transfer data lintas asal. Untuk informasi selengkapnya, lihat Cross-Origin Resource Sharing (CORS).
T: Apa yang terjadi jika CORS tidak diaktifkan secara default pada CDN?
Secara default, CDN tidak mengaktifkan berbagi sumber daya lintas asal (CORS). Tanpa konfigurasi ini, browser menerapkan kebijakan asal sama dan memblokir permintaan lintas asal, sehingga mencegah situs web lain memuat sumber daya Anda.
Mengapa perlu mengonfigurasi berbagi sumber daya lintas asal?
Karena pembatasan keamanan, browser biasanya menerapkan kebijakan asal sama, yang membatasi permintaan untuk memuat dan mengakses sumber daya dari domain, subdomain, protokol, atau port yang berbeda. Misalnya, example.com tidak dapat mengakses sumber daya di example.org. Dengan mengonfigurasi berbagi sumber daya lintas asal (CORS), Anda dapat mengatur header respons terkait pada server CDN. Jika permintaan mencakup header yang sesuai dengan aturan yang diizinkan, server akan mengembalikan header respons HTTP yang sesuai, sehingga memungkinkan sumber daya lintas asal dimuat dan diakses.
Cara kerja
CORS dikonfigurasi pada server origin
Dengan CORS dikonfigurasi pada CDN
Catatan penggunaan
-
Jika Anda menggunakan bucket OSS sebagai server origin, konfigurasi CORS di konsol CDN akan menggantikan konfigurasi CORS di konsol OSS. Untuk informasi lebih lanjut tentang cara mengonfigurasi CORS di konsol OSS, lihat Setel aturan CORS.
-
Jika Anda menggunakan server on-premises atau instance ECS sebagai server origin, kami menyarankan agar Anda memisahkan konten statis dan dinamis serta menggunakan CDN untuk mempercepat pengiriman file statis. Fitur CORS yang dikonfigurasi di konsol CDN hanya berlaku untuk file statis.
Aktifkan berbagi sumber daya lintas asal
-
Masuk ke CDN console.
-
Di panel navigasi kiri, klik Domain Names.
-
Pada halaman Domains, temukan domain yang ingin Anda kelola dan klik Actions di kolom Manage.
-
Klik Cache, pilih tab Modify Outgoing Response Header, lalu atur origin dan metode yang diizinkan untuk permintaan lintas asal.
-
Atur origin untuk permintaan lintas asal
Klik Customize, konfigurasi parameter seperti dijelaskan dalam tabel berikut, lalu klik OK.
Parameter
Deskripsi
Contoh
Operation
Atur parameter ini ke Add untuk mengaktifkan fitur validasi CORS.
Add
Response Header
Anda harus mengatur
Access-Control-Allow-Originuntuk menggunakan fitur validasi lintas asal.Access-Control-Allow-Origin
Header Value
Jika validasi CORS dinonaktifkan: Anda hanya dapat menentukan wildcard atau satu origin.
-
Wildcard
*: Mengizinkan origin apa pun mengakses sumber daya. -
Single origin: Mengizinkan sumber daya hanya diakses dari origin tertentu (nama domain).
Jika validasi CORS diaktifkan: Anda dapat menentukan wildcard, satu origin, beberapa origin, atau domain wildcard.
-
Wildcard
*: Mengizinkan sumber apa pun mengakses sumber daya. -
Single origin: Mengizinkan sumber daya hanya diakses dari origin tertentu (nama domain).
-
Multiple specified origins: Konfigurasikan beberapa origin spesifik (nama domain), dipisahkan dengan koma
,, untuk mengizinkan origin tersebut mengakses sumber daya. -
Wildcard domain: Tentukan domain wildcard untuk mengizinkan akses dari semua origin yang cocok dengan pola tersebut.
-
* -
http://www.aliyun.com -
https://aliyun.com,http://www.aliyun.com -
http://*.aliyun.com
Allow Duplicates
-
Yes: Header dari server origin dipertahankan, dan header baru dengan nama yang sama juga ditambahkan ke respons.
-
No: Header baru menggantikan header dengan nama yang sama dari server origin.
PentingPengaturan Allow Duplicates dan CORS Validation saling eksklusif. Jika Anda mengatur Allow Duplicates ke Yes, validasi CORS dinonaktifkan.
No
CORS
-
CORS hanya dapat dikonfigurasi ketika Operation diatur ke Add, dan Response Header diatur ke "Access-Control-Allow-Origin".
-
CORS dapat diatur ke Disable atau Enable. Nilai default-nya adalah Disable.
-
Disable: POP CDN tidak memvalidasi header
Origindalam permintaan masuk dan selalu mengembalikan nilaiAccess-Control-Allow-Originyang dikonfigurasi. -
Enable: POP CDN memvalidasi permintaan lintas asal berdasarkan aturan berikut dan merespons dengan nilai
Access-Control-Allow-Originyang sesuai.-
Response Header: Jika Response Header diatur ke
*, POP selalu mengembalikanAccess-Control-Allow-Origin:*, terlepas dari apakah permintaan pengguna berisi headerOriginatau nilainya. -
Response Header: Response Header diatur ke satu atau beberapa origin spesifik, dipisahkan dengan koma (
,).-
Jika nilai header
Origindalam permintaan pengguna persis sesuai dengan salah satu origin yang dikonfigurasi, POP merespons dengan origin tersebut sebagai nilai headerAccess-Control-Allow-Origin. -
Jika tidak ditemukan kecocokan, POP tidak menambahkan header CORS ke respons.
-
-
Response Header: Jika Response Header diatur ke domain wildcard, POP memeriksa apakah header
Origindalam permintaan cocok dengan pola wildcard.
-
-
Jika Anda mengatur Enable ke Header Value dan nama domain dalam bidang Header Value berisi tanda hubung (
-), Anda harus melakukan escape dengan mengganti-menjadi%-. Contoh:-
Nilai header asli:
http://doc.aliyun-example.com. -
Nilai header yang di-escape:
http://doc.aliyun%-example.com.
-
-
Enable
-
-
Atur metode untuk permintaan lintas asal
Klik Customize, konfigurasi parameter seperti dijelaskan dalam tabel berikut, lalu klik OK.
Parameter
Deskripsi
Contoh
Operation
Atur parameter ini ke Add.
Add
Response Header
Harus diatur ke
Access-Control-Allow-MethodsAccess-Control-Allow-Methods
Header Value
Mendukung metode permintaan
GET, POST, dan PUT. Jika Anda perlu menambahkanGET, POST, dan PUTsekaligus, pisahkan dengan koma,.GETAllow Duplicates
-
Yes: Header dari server origin dipertahankan, dan header baru dengan nama yang sama juga ditambahkan ke respons.
-
No: Header baru menggantikan header dengan nama yang sama dari server origin.
No
-
-
T: Setelah menambahkan header respons CORS, apakah berlaku untuk sumber daya statis yang sudah di-cache sebelumnya?
Tidak. CDN menyimpan cache seluruh respons HTTP, termasuk header. Untuk menerapkan header CORS baru ke konten yang sudah di-cache, Anda harus melakukan purge URL sumber daya tersebut. Jika tidak, pengguna akan terus menerima respons lama dari cache.
Contoh konfigurasi
Contoh 1
Jika nilai header respons untuk CORS diatur ke satu atau beberapa origin spesifik yang dipisahkan dengan koma (,):
-
Jika nilai header
Origindalam permintaan pengguna persis sesuai dengan salah satu origin yang ditentukan, POP CDN merespons dengan header CORS yang sesuai. -
Jika tidak ditemukan kecocokan persis, header CORS tidak disertakan dalam respons.
Pada CDN/, atur: Access-Control-Allow-Origin: http://example.com,https://aliyundoc.com.
-
Header
Originpermintaan pengguna adalahhttp://example.com, dan POP CDN merespons denganAccess-Control-Allow-Origin: http://example.com. -
Header
Origindalam permintaan pengguna adalahhttps://aliyundoc.com, dan node CDN merespons denganAccess-Control-Allow-Origin: https://aliyundoc.com. -
Node CDN tidak akan merespons permintaan pengguna dengan header Origin
http://aliyundoc.com(karena ketidaksesuaian protokol: permintaan pengguna menggunakan HTTP, sedangkan CDN dikonfigurasi untuk HTTPS). -
Jika header
Originpermintaan adalahhttp://aliyun.com, POP CDN tidak akan merespons (ketidaksesuaian domain).
Contoh 2
Jika nilai header respons untuk CORS diatur ke domain wildcard, POP memeriksa apakah nilai Origin dalam header permintaan cocok dengan pola wildcard.
Pada CDN/, atur: Access-Control-Allow-Origin: http://*.aliyundoc.com.
-
Permintaan pengguna berisi header Origin
http://demo.aliyundoc.com, dan POP CDN merespons denganAccess-Control-Allow-Origin: http://demo.aliyundoc.com. -
Jika header Origin permintaan adalah
http://demo.example.com, POP CDN tidak akan merespons karena nama domain tidak cocok. -
Node CDN tidak merespons permintaan pengguna dengan header Origin
https://demo.aliyundoc.comkarena permintaan menggunakan protokol HTTPS, tetapi CDN dikonfigurasi dengan protokol HTTP.
T: Bagaimana cara menggunakan curl untuk memverifikasi bahwa header Access-Control-Allow-Origin dari CDN berfungsi?
Kirim permintaan GET dengan header Origin menggunakan curl -svo /dev/null dan periksa output verbose untuk header respons. Jika header Access-Control-Allow-Origin muncul dalam respons dengan nilai yang diharapkan (misalnya, * atau domain yang Anda tentukan), konfigurasi CORS Anda berfungsi. Jika header tidak ada, tinjau aturan header respons kustom Anda di konsol CDN dan pengaturan CORS server origin Anda.
curl -svo /dev/null https://img.anleme.cc/agent/dl1.jpg -H 'origin:https://am.anleme.cc'
FAQ
T: Apakah konfigurasi CORS CDN mendukung beberapa domain wildcard yang dipisahkan koma?
Tidak. Saat validasi CORS diaktifkan pada CDN, Anda hanya dapat mengonfigurasi satu domain wildcard. Sebagai alternatif, Anda dapat mencantumkan beberapa domain eksak (non-wildcard) yang dipisahkan koma. Anda tidak dapat menentukan daftar domain wildcard ganda yang dipisahkan koma, seperti https://*.iflyvoice.cn,https://*.xxx.com.
T: Mengapa file font yang diakses melalui domain yang dipercepat CDN memicu masalah CORS, sedangkan file video tidak?
Perilaku ini ditentukan oleh jenis sumber daya dan kebijakan keamanan browser. Secara default, file video (seperti MP4 atau WebM) yang dimuat melalui tag <video> tidak tunduk pada pembatasan CORS kecuali atribut crossorigin secara eksplisit ditambahkan. Sebaliknya, file font (seperti .ttf atau .woff) selalu tunduk pada validasi CORS wajib oleh browser, terlepas dari cara pemuatannya. Oleh karena itu, meskipun kedua jenis sumber daya dihosting di domain yang sama, permintaan font akan gagal tanpa kebijakan CORS yang valid, sedangkan permintaan video sering berhasil. Perbedaan ini berasal dari kebijakan keamanan browser standar untuk jenis konten yang berbeda.
T: Bagaimana cara memverifikasi bahwa konfigurasi CORS CDN saya efektif?
Anda dapat menggunakan metode berikut untuk verifikasi:
-
Uji kembali untuk melihat apakah kesalahan lintas asal masih berlanjut.
-
Gunakan perintah
curl -svo /dev/nulluntuk mengirim permintaan GET dengan headerOrigintertentu dan periksa header respons dalam output verbose. Contohnya:curl -svo /dev/null https://img.anleme.cc/agent/dl1.jpg -H 'origin:https://am.anleme.cc' -
Berikan domain pengujian kepada dukungan teknis untuk bantuan.
T: Saat mempercepat bucket OSS dengan CDN, bagaimana cara meneruskan konfigurasi CORS dari origin OSS?
Untuk mengaktifkan transmisi langsung konfigurasi CORS dari server origin OSS, permintaan awal ke CDN harus menyertakan header Origin. Hal ini memungkinkan CDN mengambil dari origin dan menyimpan cache header respons Access-Control-Allow-Origin. Namun, mekanisme caching ini dapat menyebabkan masalah CORS untuk permintaan berikutnya yang memiliki Origin berbeda atau tanpa header Origin. Praktik terbaik yang direkomendasikan adalah mengonfigurasi header CORS langsung di konsol CDN menggunakan fitur Modify Outgoing Request Header di Cache Settings, alih-alih mengandalkan transmisi langsung.
T: Jika beberapa domain CDN dikaitkan dengan bucket OSS yang sama, dapatkah saya mengonfigurasi aturan CORS sekali di OSS dan secara otomatis diwariskan ke semua domain CDN?
Tidak. Karena POP CDN menyimpan cache header respons dan perilaku ini dipengaruhi oleh apakah permintaan awal berisi header Origin, mengandalkan konfigurasi transmisi langsung dari OSS dapat menyebabkan kesalahan CORS yang tidak konsisten. Praktik terbaik adalah menambahkan header CORS menggunakan fitur Modify Outgoing Request Header untuk memastikan perilaku yang benar dan stabil.