Udostępnianie modułu WebAssembly między środowiskami tej samej witryny będzie ograniczone tylko do tej samej domeny.
Udostępnianie modułu WebAssembly (Wasm) między środowiskami w tej samej witrynie, ale z innych domen zostanie wycofane, aby umożliwić długoterminowe ograniczanie klastrów agentów do źródeł. Deweloperzy, którzy korzystają w ten sposób z modułów Wasm, muszą utworzyć instancje w tej samej domenie, aby mogli z nich korzystać po aktualizacji Chrome 95.
Czym są moduły Wasm i jak działają
Programy WebAssembly są podzielone na moduły, które stanowią jednostkę wdrażania, wczytywania i kompilacji.
W poniższym przykładowym kodzie moduł Wasm zaimportowany z https://iframe.site.example
jest udostępniany partnerowi https://main.site.example
przez postMessage()
. Zwróć uwagę, że te domeny są w tej samej witrynie, ale z innych domen.
Moduł Wasm na urządzeniu https://iframe.site.example
:
(async () => {
const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();
Od Chrome 95 nadawca i odbiorca muszą być w tej samej domenie. W tym przypadku https://iframe.site.example
musi mieć wartość https://main.site.example
lub na odwrót.
Dlaczego jest to potrzebne
Chrome obsługuje wewnętrznie różne dokumenty, karty i ramki w klastrach agentów z witryną jako kluczem. Oznacza to, że dokumenty w tej samej witrynie są przetwarzane w ramach tego samego procesu (proces ten różni się w zależności od przeglądarki). Od niedawna Chrome obsługuje je w bardziej szczegółowych jednostkach: origin. Nazywamy to klastrami agentów „origin-keyed”. Ponieważ jednak takie rozwiązanie jest kosztowne, klastry agentów ze źródłem jako kluczem były stosowane tylko w ograniczonych witrynach heurystycznie.
Planuje się, aby wszystkie klastry agentów były domyślnie ustawione jako źródło jako klucz. Aby było to możliwe, musimy ograniczyć możliwości, które wymagają klastrów źródła z witryną jako kluczem:
- (Tylko w Chrome) Nie można już wysyłać obiektów
SharedArrayBuffer
aniWebAssembly.Memory
do innych stron w tej samej witrynie, które pochodzą z innych domen. Ta funkcja jest już stosowana od wersji Chrome 92. - Nie możesz już wysyłać obiektów
WebAssembly.Module
do innych stron w tej samej witrynie w różnych domenach za pomocąpostMessage()
. Tę zmianę wyjaśnimy szczegółowo poniżej. - Nie możesz już ustawiać wartości
document.domain
. Jest to starsza funkcja, która zwykle umożliwia stronom z tej samej witryny z różnych domen synchronizujący się nawzajem DOM, ale w klastrach agentów ze źródłem jako kluczem jest wyłączona.
W wyniku wprowadzenia wszystkich powyższych zmian Chrome będzie domyślnie korzystać z klastrów agentów ze źródłem jako kluczem.
Więcej informacji o klastrach agentów ze źródłem jako kluczem znajdziesz w artykule Wysyłanie żądania izolacji wydajności za pomocą nagłówka Origin-Agent-Cluster.
Zasoby i dalsze kroki
Aby przeglądarka Chrome domyślnie działała z klastrami agentów ze źródłem jako kluczem, ustawimy document.domain
tylko do odczytu. Zespół Chrome zamierza wprowadzić tę zmianę
w 2022 r.
- Wyjaśnienie dotyczące klastrów agentów ze źródłem jako kluczem
- Domyślna izolacja
- Wycofuję:
document.domain
Zdjęcie: Markus Winkler w Unsplash