Header respons HTTP baru untuk membatasi pembuatan skrip di seluruh domain dan meminta resource khusus dari browser.
Origin-Agent-Cluster
adalah header respons HTTP baru yang menginstruksikan browser untuk mencegah
akses pembuatan skrip sinkron antara halaman lintas origin situs yang sama. Browser juga dapat menggunakan
Origin-Agent-Cluster
sebagai petunjuk bahwa origin Anda harus mendapatkan resource terpisahnya sendiri, seperti
proses khusus.
Kompatibilitas browser
Saat ini header Origin-Agent-Cluster
hanya diterapkan di Chrome 88 dan yang lebih baru. Prototipe ini dirancang
dalam kolaborasi erat dengan perwakilan dari Mozilla Firefox yang telah menandainya sebagai prototipe yang
layak, dan memiliki penerimaan awal
yang positif dari
perwakilan WebKit, mesin browser yang digunakan oleh Safari.
Namun, untuk saat ini, tidak ada masalah dengan men-deploy header Origin-Agent-Cluster
ke semua pengguna Anda hari ini. Browser yang tidak memahaminya akan mengabaikannya. Selain itu, karena halaman dalam
cluster agen dengan kunci origin sebenarnya dapat melakukan lebih sedikit hal daripada halaman dengan kunci situs (secara
default), tidak ada masalah interoperabilitas yang perlu dikhawatirkan.
Alasan browser tidak dapat memisahkan origin situs yang sama secara otomatis
Web dibuat berdasarkan kebijakan origin yang sama, yang merupakan fitur keamanan yang
membatasi cara dokumen dan skrip dapat berinteraksi dengan resource dari
origin lain. Misalnya, halaman yang dihosting di https://a.example
berasal dari
tempat yang berbeda dengan halaman di https://b.example
, atau halaman di https://sub.a.example
.
Di balik layar, browser menggunakan pemisahan yang disediakan origin dengan cara yang berbeda. Dulu, meskipun asal yang terpisah tidak dapat mengakses data satu sama lain, asal tersebut masih akan berbagi resource seperti thread, proses, dan alokasi memori sistem operasi. Artinya, jika satu tab lambat, semua tab lainnya akan melambat. Atau jika satu tab menggunakan terlalu banyak memori, tab tersebut akan membuat seluruh browser error.
Saat ini browser lebih canggih, dan mencoba memisahkan berbagai origin ke dalam proses yang berbeda. Cara kerjanya bervariasi di setiap browser: sebagian besar browser memiliki beberapa tingkat pemisahan antara tab, tetapi iframe yang berbeda di dalam satu tab mungkin berbagi proses. Selain itu, karena proses disertai dengan beberapa overhead memori, proses tersebut menggunakan heuristik untuk menghindari pembuatan terlalu banyak: misalnya, Firefox memiliki batas proses yang dapat dikonfigurasi pengguna, dan Chrome memvariasikan perilakunya antara desktop (tempat memori lebih banyak) dan seluler (tempat memori langka).
Heuristik ini tidak sempurna. Selain itu, kebijakan ini memiliki batasan penting: karena ada pengecualian pada kebijakan origin yang sama yang memungkinkan subdomain seperti https://sub.a.example
dan https://a.example
untuk saling berkomunikasi, browser tidak dapat secara otomatis memisahkan subdomain dari satu sama lain.
Perilaku default ini disebut "cluster agen dengan kunci situs": yaitu, browser mengelompokkan halaman berdasarkan
situs-nya. Header Origin-Agent-Cluster
baru meminta browser untuk mengubah perilaku default ini untuk halaman tertentu, memasukkannya ke dalam cluster agen dengan kunci origin, sehingga hanya dikelompokkan dengan halaman lain yang memiliki origin yang sama persis. Secara khusus, halaman lintas origin situs yang sama akan dikecualikan dari cluster agen.
Pemisahan keikutsertaan ini memungkinkan browser memberikan resource khusus
sendiri kepada cluster agen dengan kunci origin baru ini, yang tidak digabungkan dengan resource origin lainnya. Misalnya, halaman tersebut
dapat mendapatkan prosesnya sendiri, atau dijadwalkan di thread terpisah. Dengan menambahkan header Origin-Agent-Cluster
ke halaman, Anda menunjukkan kepada browser bahwa halaman akan mendapatkan manfaat dari resource khusus tersebut.
Namun, untuk melakukan pemisahan, dan mendapatkan manfaat ini, browser perlu menonaktifkan beberapa fitur lama.
Hal yang tidak dapat dilakukan halaman dengan kunci origin
Jika halaman Anda berada dalam cluster agen dengan kunci origin, Anda akan kehilangan beberapa kemampuan untuk berkomunikasi dengan halaman lintas origin situs yang sama yang sebelumnya tersedia. Khususnya:
Anda tidak dapat lagi menetapkan
document.domain
. Ini adalah fitur lama yang biasanya memungkinkan halaman lintas origin situs yang sama untuk mengakses DOM satu sama lain secara sinkron, tetapi di cluster agen dengan kunci origin, fitur ini dinonaktifkan.Anda tidak dapat lagi mengirim objek
WebAssembly.Module
ke halaman lintas origin situs yang sama lainnya melaluipostMessage()
.(Khusus Chrome) Anda tidak dapat lagi mengirim objek
SharedArrayBuffer
atauWebAssembly.Memory
ke halaman lintas origin situs yang sama lainnya.
Kapan harus menggunakan cluster agen sesuai origin
Asal yang paling banyak mendapatkan manfaat dari header Origin-Agent-Cluster
adalah asal yang:
Berperforma terbaik dengan resource khusus mereka sendiri jika memungkinkan. Contohnya mencakup game yang membutuhkan performa tinggi, situs konferensi video, atau aplikasi pembuatan multimedia.
Berisi iframe yang intensif resource dan memiliki origin yang berbeda, tetapi berasal dari situs yang sama. Misalnya, jika
https://mail.example.com
menyematkan iframehttps://chat.example.com
, kunci originhttps://mail.example.com/
memastikan bahwa kode yang ditulis oleh tim chat tidak dapat secara tidak sengaja mengganggu kode yang ditulis oleh tim email, dan dapat memberi petunjuk ke browser untuk memberi mereka proses terpisah untuk menjadwalkannya secara independen dan mengurangi dampak performanya terhadap satu sama lain.Diharapkan untuk disematkan di halaman situs yang sama dengan origin yang berbeda, tetapi diketahui bahwa halaman tersebut membutuhkan banyak resource. Misalnya, jika
https://customerservicewidget.example.com
mengharapkan untuk menggunakan banyak resource untuk chat video, dan akan disematkan di berbagai origin di seluruhhttps://*.example.com
, tim yang mengelola widget tersebut dapat menggunakan headerOrigin-Agent-Cluster
untuk mencoba mengurangi dampak performanya pada penyematan.
Selain itu, Anda juga harus memastikan bahwa Anda tidak keberatan menonaktifkan fitur komunikasi lintas origin yang jarang digunakan yang telah dibahas di atas, dan bahwa situs Anda menggunakan HTTPS.
Namun, pada akhirnya, ini hanyalah panduan. Apakah cluster agen sesuai origin akan membantu situs Anda atau tidak, pada akhirnya ditentukan dengan pengukuran. Secara khusus, Anda perlu mengukur Data Vital Web, dan berpotensi penggunaan memori, untuk melihat dampak pemberian kunci origin. (Penggunaan memori khususnya merupakan potensi masalah, karena peningkatan jumlah proses yang sedang berjalan dapat menyebabkan lebih banyak overhead memori per proses.) Anda tidak boleh hanya meluncurkan kunci origin dan berharap yang terbaik.
Bagaimana hubungannya dengan isolasi lintas origin?
Kunci origin cluster agen melalui header Origin-Agent-Cluster
terkait dengan, tetapi terpisah dari, isolasi lintas origin melalui header Cross-Origin-Opener-Policy
dan Cross-Origin-Embedder-Policy
.
Setiap situs yang mengisolasi dirinya sendiri lintas origin juga akan menonaktifkan fitur komunikasi lintas origin
situs yang sama yang sama seperti saat menggunakan header Origin-Agent-Cluster
. Namun, header
Origin-Agent-Cluster
masih dapat berguna di atas isolasi lintas origin, sebagai petunjuk tambahan
ke browser untuk mengubah heuristik alokasi resource-nya. Jadi, Anda tetap harus mempertimbangkan untuk menerapkan header Origin-Agent-Cluster
, dan mengukur hasilnya, bahkan di halaman yang sudah diisolasi lintas origin.
Cara menggunakan header Origin-Agent-Cluster
Untuk menggunakan header Origin-Agent-Cluster
, konfigurasikan server web Anda untuk mengirim header respons HTTP berikut:
Origin-Agent-Cluster: ?1
Nilai ?1
adalah sintaksis header terstruktur untuk nilai true
boolean.
Anda harus mengirimkan header ini di semua respons dari origin, bukan hanya beberapa halaman. Jika tidak, Anda bisa mendapatkan hasil yang tidak konsisten, dengan browser "mengingat" melihat permintaan kunci origin sehingga kunci origin tersebut digunakan bahkan di halaman yang tidak memintanya. Atau sebaliknya: jika halaman pertama yang dikunjungi pengguna tidak memiliki header, browser akan mengingat bahwa origin Anda tidak ingin di-key origin, dan akan mengabaikan header di halaman berikutnya.
Alasan "memori" ini adalah untuk memastikan konsistensi kunci untuk origin. Jika beberapa halaman di origin memiliki kunci origin, sementara halaman lainnya tidak, Anda dapat memiliki dua halaman dengan origin yang sama yang dimasukkan ke dalam cluster agen yang berbeda, sehingga tidak diizinkan untuk berkomunikasi satu sama lain. Hal ini akan
sangat aneh, baik untuk developer web maupun untuk bagian internal browser. Jadi, spesifikasi
untuk Origin-Agent-Cluster
mengabaikan header jika tidak konsisten dengan yang sebelumnya
dilihat untuk origin tertentu. Di Chrome, hal ini akan menghasilkan peringatan konsol.
Konsistensi ini dicakup untuk grup konteks penjelajahan, yang merupakan grup tab, jendela, atau
iframe yang semuanya dapat saling menjangkau melalui mekanisme seperti window.opener
, frames[0]
, atau
window.parent
. Artinya, setelah kunci origin atau situs origin diselesaikan (oleh browser yang melihat atau tidak melihat header), mengubahnya memerlukan pembukaan tab baru sepenuhnya, yang tidak terhubung dengan tab lama dengan cara apa pun.
Detail ini dapat penting untuk menguji header Origin-Agent-Cluster
. Saat pertama kali menambahkannya
ke situs, memuat ulang halaman saja tidak akan berfungsi; Anda harus menutup tab dan membuka tab baru.
Untuk memeriksa apakah header Origin-Agent-Cluster
diterapkan, gunakan properti window.originAgentCluster
JavaScript. Nilai ini akan menjadi true
jika header (atau mekanisme
lainnya, seperti isolasi lintas origin) menyebabkan kunci origin; false
jika tidak; dan undefined
di browser yang tidak menerapkan header Origin-Agent-Cluster
.
Mencatat data ini ke platform analisis dapat memberikan pemeriksaan yang berharga bahwa Anda telah mengonfigurasi server dengan benar.
Terakhir, perhatikan bahwa header Origin-Agent-Cluster
hanya akan berfungsi di konteks
aman, yaitu di halaman
HTTPS atau di http://localhost
. Halaman HTTP non-localhost tidak mendukung cluster agen dengan kunci origin.
Kunci asal bukan fitur keamanan
Meskipun menggunakan cluster agen sesuai origin akan mengisolasi origin Anda dari akses sinkron dari halaman lintas origin di situs yang sama, cluster tersebut tidak memberikan perlindungan header terkait keamanan seperti Cross-Origin-Resource-Policy
dan Cross-Origin-Opener-Policy
.
Secara khusus, ini bukan perlindungan yang andal terhadap serangan side channel seperti
Spectre.
Hal ini mungkin sedikit mengejutkan, karena kunci origin terkadang dapat menyebabkan origin Anda mendapatkan prosesnya sendiri, dan proses terpisah adalah pertahanan penting terhadap serangan side-channel. Namun, ingat
bahwa header Origin-Agent-Cluster
hanyalah petunjuk dalam hal tersebut. Browser tidak
terikat untuk memberikan proses terpisah ke origin Anda, dan mungkin tidak melakukannya karena berbagai alasan:
Browser mungkin tidak menerapkan teknologi untuk melakukannya. Misalnya, saat ini Safari dan Firefox dapat menempatkan tab terpisah ke dalam prosesnya sendiri, tetapi belum dapat melakukannya untuk iframe.
Browser mungkin memutuskan bahwa overhead proses terpisah tidak sebanding. Misalnya, di perangkat Android dengan memori rendah, atau di WebView Android, Chrome menggunakan proses sesedikit mungkin.
Browser mungkin ingin mengikuti permintaan yang ditunjukkan header
Origin-Agent-Cluster
, tetapi dapat melakukannya menggunakan teknologi isolasi yang berbeda dengan proses. Misalnya, Chrome menjelajahi menggunakan thread, bukan proses, untuk isolasi performa semacam ini.Pengguna, atau kode yang berjalan di situs lain, mungkin telah membuka halaman dengan kunci situs di origin Anda, sehingga jaminan konsistensi akan diterapkan dan header
Origin-Agent-Cluster
akan diabaikan sepenuhnya.
Oleh karena itu, penting untuk tidak menganggap cluster agen dengan kunci asal sebagai fitur keamanan. Sebagai gantinya, ini adalah cara untuk membantu browser memprioritaskan alokasi resource, dengan mengisyaratkan bahwa origin Anda akan mendapatkan manfaat dari resource khusus (dan bahwa Anda bersedia melepaskan fitur tertentu sebagai gantinya).
Masukan
Tim Chrome ingin mendengar kabar dari Anda jika Anda menggunakan, atau mempertimbangkan untuk menggunakan, header
Origin-Agent-Cluster
. Minat dan dukungan publik Anda membantu kami memprioritaskan fitur dan menunjukkan kepada
vendor browser lain betapa pentingnya fitur tersebut. Kirim tweet ke @ChromiumDev dan beri tahu Chrome DevRel pendapat dan pengalaman Anda.
Jika memiliki pertanyaan lain tentang spesifikasi, atau detail cara kerja fitur, Anda dapat
mengajukan masalah di repositori GitHub HTML Standard. Selain itu, jika
mengalami masalah terkait penerapan Chrome, Anda dapat melaporkan bug di
new.crbug.com
dengan kolom Komponen ditetapkan ke Internals>Sandbox>SiteIsolation
.
Pelajari lebih lanjut
Untuk mempelajari lebih lanjut cluster agen dengan kunci origin, Anda dapat melihat detailnya di link berikut:
- Demo dan sumber demo
- Penjelas
- Spesifikasi
- Melacak bug: Chrome, Firefox, Safari