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 tersendiri yang terpisah, seperti
proses khusus.
Kompatibilitas browser
Saat ini header Origin-Agent-Cluster
hanya diterapkan di Chrome 88 dan seterusnya. Browser ini dirancang
dengan kolaborasi erat dengan perwakilan dari Mozilla Firefox yang telah menandainya sebagai layak
membuat prototipe, dan memiliki
penerimaan yang positif
awal dari
perwakilan WebKit, mesin browser yang digunakan oleh Safari.
Namun sementara itu, 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 di
cluster agen dengan kunci origin sebenarnya dapat melakukan lebih sedikit hal daripada halaman yang dikunci oleh situs (default), tidak ada masalah interoperabilitas yang perlu dikhawatirkan.
Alasan browser tidak dapat otomatis memisahkan asal situs yang sama
Web dibuat berdasarkan kebijakan origin yang sama, yaitu fitur keamanan yang membatasi cara dokumen dan skrip dapat berinteraksi dengan resource dari origin lain. Misalnya, halaman yang dihosting di https://a.example
memiliki
asal yang berbeda dengan yang ada di https://b.example
, atau yang ada di https://sub.a.example
.
Di balik layar, browser menggunakan pemisahan yang disediakan origin dengan cara yang berbeda. Dahulu, meskipun sumber yang terpisah tidak dapat mengakses data satu sama lain, keduanya tetap akan berbagi resource seperti thread sistem operasi, proses, dan alokasi memori. Artinya, jika satu tab lambat, semua tab lainnya akan lambat. Atau jika satu tab menggunakan terlalu banyak memori, seluruh {i>tab<i} akan error.
Saat ini, browser lebih canggih, dan mencoba memisahkan asal yang berbeda ke dalam proses yang berbeda. Cara kerjanya berbeda-beda untuk setiap browser: sebagian besar browser memiliki beberapa tingkat pemisahan antartab, tetapi iframe yang berbeda di dalam satu tab dapat berbagi proses. Karena proses memiliki beberapa overhead memori, proses menggunakan heuristik untuk menghindari terlalu banyak kemunculan: misalnya, Firefox memiliki batas proses yang dapat dikonfigurasi pengguna, dan Chrome bervariasi perilakunya antara desktop (jika memori lebih banyak) dan seluler (jika jumlahnya langka).
Heuristik ini tidak sempurna. Selain itu, terdapat batasan penting: karena ada
pengecualian terhadap kebijakan origin yang sama yang memungkinkan subdomain seperti https://sub.a.example
dan
https://a.example
berkomunikasi satu sama lain, browser tidak dapat otomatis memisahkan subdomain
satu sama lain.
Perilaku default ini disebut "cluster agen dengan kunci situs": yaitu, browser mengelompokkan halaman berdasarkan
situsnya. Header Origin-Agent-Cluster
baru meminta browser untuk mengubah perilaku default ini
untuk halaman tertentu, memasukkannya ke dalam cluster agen dengan kunci origin, sehingga dikelompokkan
hanya 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 kepada cluster agen sesuai origin baru ini, yang tidak digabungkan dengan origin lain. Misalnya, halaman tersebut
bisa mendapatkan prosesnya sendiri, atau dijadwalkan pada thread terpisah. Dengan menambahkan
header Origin-Agent-Cluster
ke halaman, Anda menunjukkan ke browser bahwa halaman tersebut akan
mendapat manfaat dari resource khusus tersebut.
Namun, untuk melakukan pemisahan dan mendapatkan manfaat tersebut, browser harus menonaktifkan beberapa fitur lama.
Yang tidak dapat dilakukan oleh halaman dengan kunci origin
Jika halaman Anda berada di cluster agen dengan kunci origin, Anda tidak dapat lagi 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 mengakses DOM masing-masing secara sinkron, tetapi dalam 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 cluster agen sesuai origin digunakan
Origin yang paling mendapatkan manfaat dari header Origin-Agent-Cluster
adalah yang:
Melakukan performa terbaik dengan sumber daya khusus mereka sendiri jika memungkinkan. Contohnya mencakup game yang membutuhkan performa tinggi, situs konferensi video, atau aplikasi pembuatan multimedia.
Berisi iframe yang membutuhkan banyak resource dan merupakan origin yang berbeda, tetapi situs yang sama. Misalnya, jika
https://mail.example.com
menyematkan iframehttps://chat.example.com
, penguncian originhttps://mail.example.com/
memastikan bahwa kode yang ditulis oleh tim chat tidak dapat mengganggu kode yang ditulis oleh tim email secara tidak sengaja, dan dapat menunjukkan ke browser untuk memberikan proses terpisah guna menjadwalkannya secara independen dan saling mengurangi dampaknya terhadap performanya.Anda harus disematkan di halaman situs yang sama dengan origin yang berbeda, tetapi biasanya akan memerlukan banyak resource. Misalnya, jika
https://customerservicewidget.example.com
ingin menggunakan banyak resource untuk video chat, 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 terhadap penyemat.
Selain itu, Anda juga perlu memastikan bahwa Anda dapat menonaktifkan fitur komunikasi lintas origin yang jarang digunakan yang 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 cara terbaik melalui pengukuran. Secara khusus, Anda perlu mengukur Data Web, dan kemungkinan penggunaan memori, untuk melihat dampak dari kunci origin. (Penggunaan memori secara khusus dapat menjadi perhatian utama, karena peningkatan jumlah proses yang sedang dimainkan dapat menyebabkan overhead memori per proses yang lebih banyak.) Anda tidak boleh hanya sekadar meluncurkan kunci asal dan berharap yang terbaik.
Bagaimana hal ini terkait dengan isolasi lintas asal?
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 lintas origin juga akan menonaktifkan fitur komunikasi lintas origin
situs yang sama seperti saat menggunakan header Origin-Agent-Cluster
. Namun, header Origin-Agent-Cluster
masih dapat berguna setelah isolasi lintas origin, sebagai petunjuk tambahan
bagi browser untuk mengubah heuristik alokasi resource-nya. Jadi, sebaiknya Anda tetap 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 untuk mengirimkan header respons HTTP berikut:
Origin-Agent-Cluster: ?1
Nilai ?1
adalah sintaksis header terstruktur untuk nilai true
boolean.
Penting untuk mengirim header ini di semua respons dari origin Anda, bukan hanya beberapa halaman. Jika tidak, Anda bisa mendapatkan hasil yang tidak konsisten, yaitu browser "mengingat" melihat permintaan kunci origin sehingga browser menyertakan kunci origin 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 menggunakan kunci origin, dan akan mengabaikan header pada halaman berikutnya.
Alasan "memori" ini adalah untuk memastikan konsistensi keying untuk origin. Jika beberapa halaman pada
origin menggunakan kunci origin, sementara yang lain tidak, Anda mungkin memiliki dua halaman origin yang sama
yang dimasukkan ke dalam cluster agen yang berbeda, sehingga tidak diizinkan untuk berkomunikasi satu sama lain. Hal ini akan menjadi
hal yang sangat aneh, baik bagi developer web maupun internal browser. Jadi, spesifikasi
untuk Origin-Agent-Cluster
akan mengabaikan header jika tidak konsisten dengan yang sebelumnya
dilihat untuk asal tertentu. Di Chrome, hal ini akan mengakibatkan peringatan konsol.
Konsistensi ini mencakup grup konteks penjelajahan, yang merupakan grup tab, jendela, atau
iframe yang semuanya dapat saling menjangkau satu sama lain melalui mekanisme seperti window.opener
, frames[0]
, atau
window.parent
. Artinya, setelah origin atau kunci situs origin diselesaikan (oleh
browser melihat, atau tidak melihat, header), mengubahnya memerlukan pembukaan tab
yang benar-benar baru, tidak terhubung ke tab lama dengan cara apa pun.
Detail ini dapat penting untuk menguji header Origin-Agent-Cluster
. Saat pertama kali menambahkannya
ke situs Anda, pemuatan 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. Ini akan menjadi true
jika header (atau mekanisme
lain, seperti isolasi lintas origin) menyebabkan kunci origin; false
jika tidak; dan undefined
di browser yang tidak mengimplementasikan header Origin-Agent-Cluster
.
Mencatat data ini ke platform analisis dapat memberikan pemeriksaan berharga bahwa Anda telah mengonfigurasi
server dengan benar.
Terakhir, perhatikan bahwa header Origin-Agent-Cluster
hanya akan berfungsi pada konteks
aman, yaitu di halaman
HTTPS atau http://localhost
. Halaman HTTP non-localhost tidak mendukung cluster agen
dengan kunci origin.
Kunci origin bukan merupakan fitur keamanan
Meskipun jika menggunakan cluster agen sesuai origin, cluster agen dengan kunci origin mengisolasi origin Anda dari akses sinkron
dari halaman lintas origin situs yang sama, tetapi tidak memberikan perlindungan untuk
header terkait keamanan seperti
Cross-Origin-Resource-Policy
dan
Cross-Origin-Opener-Policy
.
Secara khusus, keamanan ini bukan perlindungan yang andal terhadap serangan side channel seperti
Spectre.
Hal ini mungkin sedikit mengejutkan, karena kunci origin terkadang dapat menyebabkan origin mendapatkan prosesnya sendiri, dan proses terpisah merupakan pertahanan penting terhadap serangan side-channel. Namun, perlu diingat
bahwa header Origin-Agent-Cluster
hanyalah petunjuk terkait hal tersebut. Browser tidak berkewajiban untuk memberikan proses terpisah pada origin, 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.
{i>Browser<i} mungkin memutuskan tidak perlunya {i>overhead <i}dari proses yang terpisah. Misalnya, pada perangkat Android bermemori rendah, atau di Android WebView, Chrome menggunakan proses sesedikit mungkin.
Browser mungkin perlu mematuhi permintaan yang ditunjukkan oleh 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 yang sesuai dengan situs di origin Anda, yang menyebabkan jaminan konsistensi aktif dan header
Origin-Agent-Cluster
akan diabaikan sepenuhnya.
Karena alasan ini, penting untuk tidak menganggap cluster agen sesuai origin sebagai fitur keamanan. Sebaliknya, ini adalah cara untuk membantu browser memprioritaskan alokasi resource, dengan menunjukkan bahwa origin Anda akan mendapatkan manfaat dari resource khusus (dan Anda bersedia menyerahkan fitur tertentu sebagai gantinya).
Masukan
Tim Chrome ingin mengetahui jika Anda menggunakan, atau mempertimbangkan untuk menggunakan, header Origin-Agent-Cluster
. Kepentingan dan dukungan publik Anda membantu kami memprioritaskan fitur dan menunjukkan kepada vendor browser lain betapa pentingnya fitur tersebut. Tweet di @ChromiumDev dan
berikan Chrome DevRel menyampaikan pendapat dan pengalaman Anda.
Jika ada pertanyaan lain tentang spesifikasi, atau detail cara kerja fitur ini, Anda dapat
mengajukan masalah di repositori GitHub Standar HTML. Dan jika
mengalami masalah pada implementasi Chrome, Anda dapat melaporkan bug di
new.crbug.com
dengan kolom Components ditetapkan ke Internals>Sandbox>SiteIsolation
.
Selengkapnya
Untuk mempelajari cluster agen sesuai origin lebih lanjut, Anda dapat mempelajari detailnya di link berikut:
- Demo dan sumber demo
- Penjelasan
- Spesifikasi
- Bug pelacakan: Chrome, Firefox, Safari