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 skrip sinkron antara halaman lintas origin situs yang sama. Browser juga dapat menggunakan
Origin-Agent-Cluster
sebagai petunjuk bahwa origin Anda harus mendapatkan resource terpisah yang terpisah, seperti
proses khusus.
Kompatibilitas browser
Saat ini header Origin-Agent-Cluster
hanya diterapkan di Chrome 88 dan seterusnya. Alat ini dirancang
melalui kerja sama erat dengan perwakilan dari Mozilla Firefox yang telah menandainya sebagai berharga
membuat prototipe, dan memiliki sebuah
positif awal
penerimaan sinyal dari
perwakilan WebKit, mesin {i>browser<i} yang digunakan oleh Safari.
Namun, sementara itu, tidak ada masalah dengan men-deploy header Origin-Agent-Cluster
ke semua
saat ini. Browser yang tidak memahaminya akan mengabaikannya. Dan, karena halaman di
cluster agen sesuai origin sebenarnya dapat melakukan lebih sedikit hal daripada cluster yang sesuai dengan 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 bagaimana dokumen dan skrip dapat
berinteraksi dengan sumber daya dari
origin. Misalnya, halaman yang dihosting di https://a.example
berada di
origin yang berbeda dari satu di https://b.example
, atau satu di https://sub.a.example
.
Di balik layar, browser menggunakan pemisahan yang disediakan oleh asal dengan cara yang berbeda. Di hari, meskipun origin yang terpisah tidak akan dapat mengakses data satu sama lain, mereka masih berbagi sumber daya seperti {i>thread<i} sistem operasi, proses, dan alokasi memori. Ini berarti jika satu tab lambat, maka akan memperlambat semua tab lainnya. Atau jika satu tab menggunakan terlalu banyak memori, tab itu akan membuat seluruh browser mogok.
Saat ini, browser lebih canggih, dan mencoba memisahkan sumber yang berbeda ke dalam proses-proses tersebut. Cara kerjanya berbeda-beda untuk setiap browser: sebagian besar browser memiliki tingkat pemisahan tertentu antar-tab, tetapi iframe yang berbeda di dalam satu tab mungkin membagikan proses. Karena proses datang dengan beberapa {i>overhead<i} memori, mereka menggunakan heuristik untuk menghindari memunculkan terlalu banyak: misalnya, Firefox memiliki batas proses yang dapat dikonfigurasi oleh pengguna, dan Chrome memvariasikan perilakunya antara desktop (di mana memori lebih banyak) dan seluler (dalam hal ini langka).
Heuristik ini tidak sempurna. Dan mereka memiliki keterbatasan
penting: karena ada
pengecualian untuk kebijakan origin yang sama yang mengizinkan subdomain seperti https://sub.a.example
dan
https://a.example
agar dapat saling berkomunikasi, browser tidak dapat otomatis memisahkan subdomain dari
sama lain.
Perilaku default ini disebut "cluster agen sesuai situs": yaitu, browser mengelompokkan halaman berdasarkan
di situs mereka. Header Origin-Agent-Cluster
baru meminta browser untuk mengubah setelan default ini
untuk halaman tertentu, memasukkannya ke dalam cluster agen sesuai origin, sehingga dikelompokkan
hanya dengan halaman lain yang memiliki asal yang sama persis. Khususnya, halaman lintas origin situs yang sama
akan dikecualikan dari cluster agen.
Pemisahan keikutsertaan ini memungkinkan browser memberikan sendiri cluster agen baru sesuai kunci origin ini
sumber daya khusus, yang tidak digabungkan
dengan sumber daya dari sumber lainnya. Misalnya, halaman tersebut
bisa mendapatkan prosesnya sendiri, atau dijadwalkan di thread terpisah. Dengan menambahkan
Origin-Agent-Cluster
ke halaman, Anda menunjukkan kepada browser bahwa halaman akan
memanfaatkan sumber daya khusus tersebut.
Namun, untuk melakukan pemisahan, dan mendapatkan manfaat ini, browser harus menonaktifkan beberapa fitur lama.
Yang tidak dapat dilakukan halaman dengan kunci origin
Jika halaman Anda berada di cluster agen sesuai origin, Anda melepaskan beberapa kemampuan untuk berbicara dengan situs yang sama lintas origin 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 masing-masing situs secara sinkron DOM orang lain, namun dalam cluster agen sesuai origin, dinonaktifkan.Anda tidak dapat lagi mengirim
WebAssembly.Module
objek ke halaman lintas origin situs yang sama lainnya melaluipostMessage()
.(Khusus Chrome) Anda tidak dapat lagi mengirim
SharedArrayBuffer
atauWebAssembly.Memory
ke halaman lintas origin situs yang sama lainnya.
Kapan harus menggunakan cluster agen sesuai origin
Origin yang paling memanfaatkan header Origin-Agent-Cluster
adalah yang:
Melakukan performa terbaik dengan sumber daya khusus mereka sendiri jika memungkinkan. Contohnya mencakup {i>game<i} yang memerlukan performa intensif, situs konferensi video, atau aplikasi pembuatan multimedia.
Berisi iframe intensif resource yang memiliki origin berbeda, tetapi memiliki situs yang sama. Misalnya, jika
https://mail.example.com
menyematkanhttps://chat.example.com
iframe, kunci originhttps://mail.example.com/
memastikan 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 untuk menjadwalkannya secara terpisah dan mengurangi dampak performanya satu sama lain.Berharap untuk disematkan di halaman asal yang berbeda di situs yang sama, tetapi ketahuilah dan menggunakan banyak resource. Misalnya, jika
https://customerservicewidget.example.com
ingin menggunakan banyak sumber daya untuk {i>video chat<i}, dan akan disematkan pada berbagai sumberhttps://*.example.com
, tim yang mengelola widget tersebut dapat menggunakanOrigin-Agent-Cluster
untuk mencoba mengurangi dampak performanya pada sematan.
Selain itu, Anda juga perlu memastikan bahwa Anda setuju untuk menonaktifkan opsi yang jarang digunakan fitur komunikasi lintas asal, dan bahwa situs Anda menggunakan HTTPS.
Namun, pada akhirnya, semua ini hanyalah panduan. Apakah cluster agen sesuai origin akan membantu situs Anda atau tidak pada akhirnya paling baik ditentukan melalui pengukuran. Secara khusus, Anda perlu mengukur Data Web Anda, dan mungkin memori Anda penggunaan, untuk melihat dampak penerapan kunci origin. (Penggunaan memori dalam khususnya merupakan kekhawatiran potensial, karena peningkatan jumlah proses yang terjadi dapat menyebabkan overhead memori per proses.) Anda tidak boleh hanya menerapkan kunci origin dan mengharapkan yang terbaik.
Bagaimana kaitannya dengan isolasi lintas asal?
Origin-keying cluster agen melalui header Origin-Agent-Cluster
berkaitan dengan, tetapi terpisah
dari isolasi lintas asal melalui Cross-Origin-Opener-Policy
dan
Cross-Origin-Embedder-Policy
header.
Setiap situs yang membuatnya diisolasi lintas origin juga akan menonaktifkan lintas origin situs yang sama
fitur komunikasi seperti saat menggunakan header Origin-Agent-Cluster
. Namun,
Header Origin-Agent-Cluster
masih dapat berguna selain isolasi lintas asal, sebagai tambahan
petunjuk ke browser untuk memodifikasi heuristik alokasi sumber dayanya. Jadi, Anda tetap
harus mempertimbangkan
menerapkan header Origin-Agent-Cluster
, dan mengukur hasilnya, bahkan pada halaman yang
sudah diisolasi lintas origin.
Cara menggunakan header Origin-Agent-Cluster
Untuk menggunakan header Origin-Agent-Cluster
, konfigurasi server web Anda untuk mengirim permintaan HTTP berikut
header respons:
Origin-Agent-Cluster: ?1
Nilai ?1
adalah atribut terstruktur
Sintaksis header untuk boolean true
dengan sejumlah nilai.
Header ini harus dikirim pada semua respons dari origin Anda, bukan hanya di beberapa halaman. Jika tidak, Anda bisa mendapatkan hasil yang tidak konsisten, yang menyebabkan browser "mengingat" melihat kunci origin dan sebagainya, serta kunci origin meskipun pada halaman yang tidak memintanya. Atau sebaliknya: jika halaman pertama yang dikunjungi pengguna tidak memiliki header, browser akan mengingat bahwa origin Anda tidak ingin sesuai dengan origin, dan akan mengabaikan header di halaman berikutnya.
Alasan "memori" ini adalah untuk memastikan konsistensi
pengaturan kunci untuk origin. Jika beberapa halaman pada
berdasarkan origin, sedangkan yang lain tidak, maka Anda dapat memiliki dua halaman origin yang sama
ditempatkan ke dalam cluster agen yang berbeda, sehingga
tidak diizinkan untuk saling berkomunikasi. Ini akan menjadi
sangat aneh, baik untuk
pengembang web dan bagian dalam browser. Jadi, spesifikasinya
untuk Origin-Agent-Cluster
, akan mengabaikan header jika tidak konsisten dengan yang sebelumnya
terlihat untuk origin tertentu. Di Chrome, tindakan ini akan menyebabkan peringatan konsol.
Konsistensi ini mencakup grup konteks penjelajahan, yang merupakan grup tab, jendela, atau
iframe yang semuanya dapat menjangkau satu sama lain melalui mekanisme seperti window.opener
, frames[0]
, atau
window.parent
. Hal ini berarti bahwa, setelah kunci asal atau kunci situs asal diselesaikan (oleh
{i>browser<i} Anda bisa melihat atau tidak melihat {i>header<i}), mengubahnya akan membutuhkan pembukaan
, tidak terhubung ke
{i>tab<i} lama dengan cara apa pun.
Detail ini dapat penting untuk menguji header Origin-Agent-Cluster
. Saat pertama kali menambahkannya
ke situs Anda, hanya memuat ulang halaman tidak akan berfungsi; Anda harus menutup tab dan membuka
satu.
Untuk memeriksa apakah header Origin-Agent-Cluster
diterapkan, gunakan JavaScript
window.originAgentCluster
. Nilainya akan menjadi true
jika header (atau
mekanisme, seperti isolasi lintas asal) menyebabkan penetapan origin; false
padahal tidak; dan undefined
di browser yang tidak menerapkan header Origin-Agent-Cluster
.
Mencatat data ini ke platform analisis dapat memberikan pemeriksaan berharga yang telah Anda konfigurasi
server Anda dengan benar.
Terakhir, perhatikan bahwa header Origin-Agent-Cluster
hanya akan berfungsi di kolom aman
konteks, yaitu di HTTPS
halaman atau pada http://localhost
. Halaman HTTP non-localhost tidak mendukung agen sesuai origin
klaster.
Kunci origin bukan fitur keamanan
Saat menggunakan cluster agen sesuai origin, Anda mengisolasi origin Anda dari akses sinkron dari
halaman lintas origin situs yang sama, tindakan ini tidak memberikan perlindungan terhadap
{i>header<i} yang berhubungan
dengan keamanan seperti
Cross-Origin-Resource-Policy
dan
Cross-Origin-Opener-Policy
Secara khusus, serangan ini bukan perlindungan
yang dapat diandalkan terhadap serangan {i>side channel<i} seperti
Spectre.
Hal ini mungkin sedikit mengejutkan, karena kunci origin terkadang dapat menyebabkan origin Anda mendapatkannya sendiri
proses terpisah, dan proses terpisah adalah pertahanan
penting terhadap serangan {i>side-channel<i}. Tapi ingat,
bahwa header Origin-Agent-Cluster
hanya merupakan petunjuk dalam hal itu. Browser tidak
kewajiban untuk memberikan proses terpisah kepada 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, namun belum dapat melakukannya untuk iframe.
Browser mungkin memutuskan bahwa tidak sepadan dengan overhead proses terpisah. Misalnya, di perangkat Android dengan memori rendah, atau di Android WebView, Chrome menggunakan proses sesedikit mungkin.
Browser mungkin ingin mematuhi permintaan yang ditunjukkan oleh header
Origin-Agent-Cluster
, tetapi cara itu bisa dilakukan dengan menggunakan teknologi isolasi yang berbeda dari proses. Misalnya, Chrome adalah mengeksplorasi menggunakan thread alih-alih proses untuk semacam isolasi kinerja ini.Pengguna, atau kode yang berjalan di situs yang berbeda, mungkin sudah membuka halaman dengan kunci situs tentang asal Anda, sehingga akan menimbulkan jaminan konsistensi dan Header
Origin-Agent-Cluster
akan diabaikan sepenuhnya.
Oleh karena itu, sebaiknya jangan menganggap cluster agen sesuai origin sebagai fitur keamanan. Melainkan, ini adalah cara membantu browser memprioritaskan alokasi sumber daya, dengan menunjukkan bahwa akan mendapatkan manfaat dari sumber daya khusus (dan Anda bersedia menyerahkan fitur sebagai imbalannya).
Masukan
Tim Chrome ingin mengetahui pendapat Anda jika Anda menggunakan, atau mempertimbangkan untuk menggunakan, Origin-Agent-Cluster
{i>header<i}. Minat dan dukungan publik Anda membantu kami memprioritaskan fitur dan menunjukkan
vendor browser betapa pentingnya mereka. Tweet di @ChromiumDev dan
biarkan Chrome DevRel mengetahui pemikiran dan pengalaman Anda.
Jika ada pertanyaan lain tentang spesifikasi atau detail cara kerja fitur tersebut, Anda dapat
masalah di repositori GitHub Standar HTML. Dan jika Anda
mengalami masalah apa pun dengan implementasi Chrome, Anda dapat melaporkan bug di
new.crbug.com
dengan kolom Components yang ditetapkan ke Internals>Sandbox>SiteIsolation
.
Pelajari lebih lanjut
Untuk mempelajari lebih lanjut cluster agen sesuai origin, Anda dapat mempelajari detailnya di link berikut:
- Demo dan demo sumber
- Penjelasan
- Spesifikasi
- Melacak bug: Chrome, Firefox, Safari