Bir WebAssembly modülünün aynı site ortamları arasında paylaşılması yalnızca aynı kaynakla kısıtlanacaktır.
Aynı sitede ancak farklı kaynaklarda bulunan WebAssembly (Wasm) modüllerinin paylaşımı, aracı kümelerinin uzun vadede kaynaklarla kapsamlı hale getirilmesine olanak tanımak için kullanımdan kaldırılacak. Wasm modüllerini bu şekilde kullanan geliştiriciler, Chrome 95'ten sonra bu modülleri kullanmaya devam etmek için aynı kaynakta örneklediklerinden emin olmalıdır.
Wasm modülleri nedir ve nasıl çalışır?
WebAssembly programları, dağıtım, yükleme ve derleme birimi olan modüller halinde düzenlenir.
Aşağıdaki örnek kodda, https://iframe.site.example
'ten içe aktarılan bir Wasm modülü, postMessage()
aracılığıyla https://main.site.example
ile paylaşılmaktadır. Bu alanların aynı sitede ancak farklı kaynakta olduğunu unutmayın.
https://iframe.site.example
'teki 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ı kaynaktan olmalıdır. Yukarıdaki durumda, https://iframe.site.example
değerinin https://main.site.example
olması veya bunun tam tersi olması gerekir.
Bu neden gerekli?
Chrome, site anahtarına sahip aracı kümelerinde farklı dokümanları, sekmeleri ve çerçeveleri dahili olarak işlemektedir. Bu, aynı sitedeki dokümanların aynı işlem içinde işlendiği anlamına gelir (bu işlemin tam olarak nasıl çalıştığı tarayıcıya göre değişir). Chrome, son zamanlarda bu kaynakları daha ayrıntılı birimlerde (kökenler) işlemeye başladı. Buna kaynak içeren veya kaynaklarla ilişkili aracı kümeleri diyoruz. Ancak bu işlem kaynak açısından pahalı olduğundan, kaynak içeren veya kaynaklarla ilişkili aracı kümeleri yalnızca sınırlı web sitelerine heuristik olarak uygulandı.
Planımız, tüm müşteri temsilcisi kümelerini varsayılan olarak kaynak içeren veya kaynaklarla ilişkili hale getirmektir. Bunu yapmak için siteye bağlı kaynak kümelerini gerektiren özellikleri kısıtlamamız gerekir:
- (Yalnızca Chrome) Artık aynı sitedeki diğer kaynakta çapraz sayfalara
SharedArrayBuffer
veyaWebAssembly.Memory
öğeleri gönderemezsiniz. Bu özellik Chrome 92'den beri kullanılmaktadır. - Artık
postMessage()
aracılığıyla aynı sitedeki diğer kaynakta çapraz sayfalaraWebAssembly.Module
nesneleri gönderemezsiniz. Bu değişiklik aşağıda daha ayrıntılı olarak açıklanmıştır. - Artık
document.domain
ayarını yapamazsınız. Bu, normalde aynı sitenin çapraz kaynak sayfalarının birbirlerinin DOM'una senkronize olarak erişmesine izin veren eski bir özelliktir ancak kaynak içeren veya kaynaklarla ilişkili aracı kümelerinde devre dışıdır.
Yukarıdaki tüm değişiklikleri ele alan Chrome, varsayılan olarak kaynak anahtarına sahip aracı kümelerini kullanmaya başlayacaktır.
Kaynak içeren veya kaynaklarla ilişkili aracı kümeleri hakkında daha fazla bilgi edinmek için Origin-Agent-Cluster üstbilgisiyle performans izolasyonu isteğinde bulunma başlıklı makaleyi inceleyin.
Sonraki adımlar ve kaynaklar
Chrome'un varsayılan olarak kaynak anahtarıyla çalışan aracı kümeleriyle çalışmasını sağlamak için document.domain
'ü salt okunur hale getireceğiz. Chrome ekibi bu değişikliği 2022'nin bir döneminde uygulamayı planlıyor.
- Kaynak içeren veya kaynaklarla ilişkili aracı kümeleri hakkında açıklama
- Varsayılan olarak izolasyon
document.domain
desteği sonlandırılıyor
Fotoğraf: Markus Winkler, Unsplash