Berbagi modul WebAssembly antara lingkungan situs yang sama akan dibatasi hanya untuk origin yang sama.
Berbagi modul WebAssembly (Wasm) antara lingkungan situs yang sama, tetapi lintas origin akan tidak digunakan lagi agar cluster agen dapat dicakup ke origin dalam jangka panjang. Developer yang menggunakan modul Wasm dengan cara tersebut harus memastikan untuk membuat instance modul tersebut di origin yang sama agar dapat terus menggunakannya setelah Chrome 95.
Apa itu modul Wasm dan cara kerjanya
Program WebAssembly diatur ke dalam modul, yang merupakan unit deployment, pemuatan, dan kompilasi.
Dalam contoh kode berikut, modul Wasm yang diimpor dari
https://iframe.site.example dibagikan ke https://main.site.example melalui
postMessage(). Perhatikan bahwa domain ini berada di situs yang sama, tetapi lintas origin.
Modul Wasm di https://iframe.site.example:
(async () => {
const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();
Mulai Chrome 95, pengirim dan penerima harus memiliki origin yang sama. Dalam
kasus di atas, https://iframe.site.example harus berupa
https://main.site.example atau sebaliknya.
Alasan hal ini diperlukan
Chrome telah menangani berbagai dokumen, tab, dan frame secara internal di cluster agen dengan kunci situs. Artinya, dokumen situs yang sama ditangani dalam proses yang sama (cara kerjanya bervariasi per browser). Baru-baru ini, Chrome mulai menanganinya dalam unit yang lebih terperinci: origin. Kami menyebutnya cluster agen sesuai origin. Namun, karena hal ini memerlukan banyak resource, cluster agen sesuai origin hanya diterapkan ke situs tertentu secara heuristik.
Rencananya adalah membuat semua cluster agen sesuai origin secara default. Untuk mencapai hal ini, kita perlu membatasi kemampuan yang memerlukan cluster origin berkunci situs:
- (Khusus Chrome) Anda tidak dapat lagi mengirim objek
SharedArrayBufferatauWebAssembly.Memoryke halaman lintas origin situs yang sama lainnya. Fitur ini sudah diterapkan sejak Chrome 92. - Anda tidak dapat lagi mengirim objek
WebAssembly.Moduleke halaman lintas origin situs yang sama lainnya melaluipostMessage(). Perubahan ini dijelaskan secara lebih mendetail di bawah. - 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 pengelompokan agen sesuai origin, fitur ini dinonaktifkan.
Dengan mengatasi semua perubahan di atas, Chrome akan beralih menggunakan pengelompokan agen sesuai origin secara default.
Untuk mempelajari lebih lanjut pengelompokan agen sesuai origin, lihat Meminta isolasi performa dengan header Origin-Agent-Cluster.
Langkah selanjutnya dan sumber daya
Agar Chrome berfungsi dengan cluster agen sesuai origin secara default, kita akan
membuat document.domain hanya baca. Tim Chrome berencana menerapkan perubahan ini
pada tahun 2022.
- Penjelasan pengelompokan agen sesuai origin
- Isolasi secara Default
- Penghentian penggunaan
document.domain
Foto oleh Markus Winkler di Unsplash