Berbagi modul WebAssembly antar-lingkungan situs yang sama akan dibatasi hanya untuk origin yang sama.
Berbagi modul WebAssembly (Wasm) di antara lingkungan situs yang sama, tetapi lintas origin akan dihentikan penggunaannya untuk memungkinkan cluster agen dikaitkan dengan origin dalam jangka panjang. Developer yang menggunakan modul Wasm dengan cara tersebut harus memastikan untuk membuat instance modul tersebut di origin yang sama untuk 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 dengan https://main.site.example
melalui
postMessage()
. Perhatikan bahwa domain ini berada di situs yang sama, tetapi berasal dari berbagai 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 berasal dari origin yang sama. Dalam
kasus di atas, https://iframe.site.example
harus berupa
https://main.site.example
atau sebaliknya.
Alasan diperlukannya hal ini
Chrome telah menangani berbagai dokumen, tab, dan frame secara internal di cluster agen dengan kunci situs. Ini berarti dokumen same-site ditangani dalam proses yang sama (cara kerjanya bervariasi di setiap browser). Baru-baru ini, Chrome mulai menanganinya dalam unit yang lebih terperinci: origin. Kami menyebutnya cluster agen sesuai origin. Namun, karena melakukannya akan menghabiskan banyak resource, cluster agen dengan kunci origin hanya diterapkan secara heuristik ke situs terbatas.
Rencananya adalah membuat semua cluster agen sesuai origin secara default. Untuk mencapai hal ini, kita perlu membatasi kemampuan yang memerlukan cluster origin dengan kunci situs:
- (Khusus Chrome) Anda tidak dapat lagi mengirim objek
SharedArrayBuffer
atauWebAssembly.Memory
ke halaman lintas origin situs yang sama lainnya. Fitur 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 akan 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 dalam cluster agen dengan kunci origin, fitur ini dinonaktifkan.
Dengan mengatasi semua perubahan di atas, Chrome akan beralih untuk menggunakan cluster agen dengan kunci origin secara default.
Untuk mempelajari lebih lanjut cluster 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 menargetkan perubahan ini akan diterapkan
pada tahun 2022.
Foto oleh Markus Winkler di Unsplash