Wasm modülü paylaşımını aynı kaynakla kısıtlama

Aynı site ortamları arasında WebAssembly modülü paylaşımı yalnızca aynı kaynakla sınırlandırılacaktır.

Bir WebAssembly (Wasm) modülünün aynı site ancak kaynaklar arası ortamlar arasında paylaşılması aracı kümelerine izin vermek için desteği sonlandırıldı kaynak kapsamına alınır. Wasm modüllerini bu tür alanlarda kullanan devam etmek için bu modülleri aynı kaynakta örneklendirmenin kullanmaya devam edeceğiz.

Wasm modülleri nedir ve nasıl çalışır?

WebAssembly programları, modüller halinde düzenlenir. Bu modüller, dağıtım, yükleme ve derleme.

Aşağıdaki örnek kodda, https://iframe.site.example, https://main.site.example ile şunun üzerinden paylaşıldı: postMessage(). Bu alan adlarının aynı site, ancak çapraz kaynak olduğuna dikkat edin.

https://iframe.site.example üzerindeki Wasm modülü:

(async () => {
  const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
  iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();

Chrome 95'ten itibaren, gönderen ve alıcı aynı kaynak olmalıdır. İçinde yukarıdaki örnekte, https://iframe.site.example şöyle olmalıdır: https://main.site.example veya tam tersi.

Bu neden gerekli?

Chrome, kendi web sitenizdeki farklı dokümanları, sekmeleri ve çerçeveleri dahili olarak site içeren veya sitelerle ilişkili aracı kümeleri. Bu, aynı siteye ait dokümanların aynı işlemi tekrarlamanız gerekir (bunun işleyiş şekli her tarayıcıya göre değişir). Yakın zamanda, Chrome kaynaklar ise daha ayrıntılı birimler hâlinde ele alındı. Biz buna kaynak içeren veya kaynaklarla ilişkili aracı kümeleri. Ancak bunu yapmak kaynak pahalı olduğundan Kaynak içeren veya kaynaklarla ilişkili aracı kümeleri, yalnızca sınırlı web sitelerine sezgisel olarak uygulandı.

Planda, tüm aracı kümeleri varsayılan olarak kaynak içeren veya kaynaklarla ilişkilidir. Bu amaçla bunun için siteyle ilişkili veya siteyle ilişkili bilgileri gerektiren özellikleri kısıtlamamız gerekir. kaynak kümeleri:

  • (Yalnızca Chrome) Artık SharedArrayBuffer veya WebAssembly.Memory nesneleri. Bu özellik Chrome 92 sürümünden beri mevcuttur.
  • Artık gönderemezsiniz WebAssembly.Module aynı sitenin diğer çapraz kaynak sayfalarına nesneleri postMessage() aracılığıyla gönderebilir. Bu değişiklik aşağıda daha ayrıntılı olarak açıklanmaktadır.
  • Artık şu ayarları yapamazsınız: document.domain. Bu, normalde aynı site çapraz kaynak sayfalarına izin veren eski bir özelliktir. eşzamanlı şekilde erişir ancak kaynak içeren veya kaynaklarla ilişkili aracı kümelerinde devre dışı bırakıldı.

Yukarıdaki değişikliklerin tümünü gerçekleştirdiğinizde Chrome, kaynak içeren veya kaynaklarla ilişkili aracıyı kullanacak kümeler için varsayılan olarak kullanılır.

Kaynak içeren veya kaynaklarla ilişkili aracı kümeleri hakkında daha fazla bilgi edinmek için Kaynak Aracısı Kümesi başlığıyla performans izolasyonu isteme başlıklı makaleyi inceleyin.

Sonraki adımlar ve kaynaklar

Chrome'un varsayılan olarak kaynak içeren veya kaynaklarla ilişkili aracı kümeleriyle çalışmasını sağlamak için document.domain salt okunur yap. Chrome ekibi, bu değişikliğe ayak uydurmayı amaçlıyor. görüşmek dileğiyle.

Fotoğraf: Markus Winkler açık Lansmanı kaldır