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 saat 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 (
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
asal 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 tingkat pemisahan antara tab, tetapi iframe yang berbeda di dalam satu tab mungkin berbagi proses. Dan karena memiliki beberapa overhead memori, proses menggunakan heuristik untuk menghindari munculnya terlalu banyak: misalnya, Firefox memiliki batas proses yang dapat dikonfigurasi pengguna, dan Chrome memvariasikan perilakunya antara desktop (dengan memori lebih banyak) dan seluler (jika memorinya langka).
Heuristik ini tidak sempurna. Selain itu, instance tersebut memiliki keterbatasan penting: karena ada pengecualian pada kebijakan origin yang sama yang memungkinkan subdomain seperti https://sub.a.example
dan https://a.example
saling berkomunikasi, browser tidak dapat otomatis memisahkan subdomain satu sama lain.
Perilaku default ini disebut "cluster agen dengan kunci situs": yaitu, browser mengelompokkan halaman berdasarkan
situs-nya. Header Origin-Agent-Cluster
baru akan meminta browser mengubah perilaku default ini untuk halaman tertentu, memasukkannya ke dalam cluster agen sesuai dengan origin, sehingga hanya dikelompokkan dengan halaman lain yang memiliki asal 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:
Hasil 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 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 kepada 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 bersedia 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 pengukuran. Secara khusus, Anda sebaiknya 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 dimasukkan dengan asal, dan akan mengabaikan header di halaman berikutnya.
Alasan "memori" ini adalah untuk memastikan konsistensi penguncian 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
akan mengabaikan header jika tidak konsisten dengan yang terlihat sebelumnya
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 baik melihat atau tidak melihat header), mengubahnya akan mengharuskan dibukanya tab yang sama sekali baru, dan 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, 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
.
Logging 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 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 proses
sendiri, dan proses terpisah merupakan pertahanan penting terhadap serangan side-channel. Namun, ingat bahwa header Origin-Agent-Cluster
hanyalah petunjuk dalam hal tersebut. Browser tidak berkewajiban 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 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 dengan kunci situs di origin Anda, sehingga jaminan konsistensi akan diterapkan dan header
Origin-Agent-Cluster
akan diabaikan sepenuhnya.
Oleh karena itu, sebaiknya jangan menganggap cluster agen sesuai origin sebagai fitur keamanan. Sebaliknya, 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 ada pertanyaan lain tentang spesifikasi, atau detail cara kerja fitur ini, Anda dapat
melaporkan masalah di repositori GitHub Standar HTML. 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