Berbagi modul WebAssembly di antara lingkungan situs yang sama akan dibatasi hanya untuk origin yang sama.
Berbagi modul WebAssembly (Wasm) antara lingkungan situs yang sama, tetapi lintas origin tidak akan digunakan lagi agar cluster agen dicakup ke origin dalam jangka panjang. Developer yang menggunakan modul Wasm dengan cara semacam ini 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 kode contoh berikut, modul Wasm yang diimpor dari
https://iframe.site.example
dibagikan kepada https://main.site.example
melalui
postMessage()
. Perhatikan bahwa domain ini 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 asal yang sama. Dalam
kasus di atas, https://iframe.site.example
harus berupa
https://main.site.example
, atau sebaliknya.
Mengapa ini diperlukan
Chrome telah menangani berbagai dokumen, tab, dan frame secara internal di cluster agen dengan kunci situs. Artinya, dokumen di situs yang sama ditangani dalam proses yang sama (cara kerjanya bervariasi per browser). Baru-baru ini, Chrome mulai menanganinya dalam unit yang lebih mendetail: origin. Kami menyebutnya cluster agen sesuai origin. Namun, karena biayanya mahal, cluster agen sesuai origin hanya diterapkan pada situs yang terbatas secara heuristis.
Rencananya adalah membuat semua cluster agen sesuai dengan originnya secara default. Untuk mencapai hal ini, kami perlu membatasi kemampuan yang memerlukan cluster origin yang sesuai dengan situs:
- (Khusus Chrome) Anda tidak dapat lagi mengirim objek
SharedArrayBuffer
atauWebAssembly.Memory
ke halaman lintas origin situs yang sama lainnya. Hal ini sudah diterapkan sejak Chrome 92. - Anda tidak dapat lagi mengirim objek
WebAssembly.Module
ke halaman lintas origin situs yang sama lainnya melaluipostMessage()
. Perubahan ini dijelaskan secara lebih mendetail di bawah. - Anda tidak dapat lagi menetapkan
document.domain
. Fitur 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.
Dengan menangani semua perubahan di atas, Chrome akan beralih untuk menggunakan cluster agen dengan kunci origin secara default.
Untuk mempelajari cluster agen sesuai origin lebih lanjut, lihat Meminta isolasi performa dengan header Origin-Agent-Cluster.
Langkah selanjutnya dan sumber daya
Agar Chrome dapat berfungsi dengan cluster agen sesuai origin secara default, kita akan
membuat document.domain
menjadi hanya baca. Tim Chrome akan menerapkan perubahan ini
pada tahun 2022.
Foto oleh Markus Winkler di Unsplash