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 akan tidak digunakan lagi untuk mengizinkan cluster agen untuk tercakup ke origin dalam jangka panjang. Developer yang menggunakan modul Wasm dalam harus memastikan untuk membuat instance modul tersebut di origin yang sama untuk melanjutkan menggunakannya setelah Chrome 95.
Apa itu modul Wasm dan cara kerjanya
Program WebAssembly diatur ke dalam modul, yang merupakan unit dari 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 berasal dari origin yang sama. Di beberapa
dalam kasus di atas, https://iframe.site.example
harus
https://main.site.example
atau sebaliknya.
Mengapa hal ini diperlukan
Chrome telah menangani secara internal berbagai dokumen, tab, dan {i>frame<i} pada cluster agen sesuai situs. Ini berarti dokumen di lokasi yang sama ditangani di dalam proses yang sama (cara kerjanya berbeda-beda untuk setiap browser). Baru-baru ini, Chrome kita mulai menanganinya dalam unit yang lebih terperinci: {i>origin<i}. Kami menyebutnya cluster agen sesuai origin. Namun, karena hal itu mahal, cluster agen sesuai origin hanya diterapkan ke situs terbatas secara heuris.
Rencananya adalah membuat semua cluster agen sesuai dengan originnya secara default. Untuk untuk mencapainya, kita perlu membatasi kemampuan yang mengharuskan kunci cluster origin:
- (Khusus Chrome) Anda tidak dapat lagi mengirim
SharedArrayBuffer
atauWebAssembly.Memory
ke halaman lintas origin situs yang sama lainnya. Hal ini sudah diterapkan sejak Chrome 92. - Anda tidak dapat lagi mengirim
WebAssembly.Module
objek ke 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 mengizinkan halaman lintas origin situs yang sama untuk secara sinkron mengakses DOM satu sama lain, tetapi dalam cluster agen sesuai origin, dinonaktifkan.
Dengan mengatasi semua perubahan di atas, Chrome akan beralih untuk menggunakan agen sesuai origin cluster 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, kami akan
membuat document.domain
hanya baca. Tim Chrome ingin menerapkan perubahan ini
sekitar tahun 2022.
- Penjelasan cluster agen sesuai origin
- Isolasi secara Default
- Menghentikan penggunaan
document.domain
Foto oleh Markus Winkler nyala Buka Percikan