Współdzielenie modułu WebAssembly między środowiskami w tej samej witrynie będzie ograniczone tylko do tej samej domeny.
Współdzielenie modułu WebAssembly (Wasm) między środowiskami w tej samej witrynie, ale między domenami będzie wycofane, aby umożliwić klastry agentów by mieć zakres ograniczony do źródeł w dłuższej perspektywie. Deweloperzy, którzy używają modułów Wasm w takiej aby można było kontynuować, należy zadbać o utworzenie instancji tych modułów z tego samego źródła. nie jest już dostępna w Chrome 95.
Czym są moduły Wasm i jak działają
Programy WebAssembly są podzielone na moduły, wdrażanie, wczytywanie i kompilację.
W poniższym przykładowym kodzie moduł Wasm został zaimportowany z
Element https://iframe.site.example
jest udostępniany użytkownikowi https://main.site.example
przez
postMessage()
Zwróć uwagę, że te domeny należą do tej samej witryny, ale z innej domeny.
Moduł Wasm w 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ą pochodzić z tego samego źródła. W
w powyższym przypadku, https://iframe.site.example
musi być
https://main.site.example
lub odwrotnie.
Dlaczego to jest potrzebne
Przeglądarka Chrome obsługuje wewnętrznie różne dokumenty, karty i ramki klastrów agentów z witryną jako kluczem. Oznacza to, że dokumenty z tej samej witryny są obsługiwane w ramach taki sam proces (działa to różnie w zależności od przeglądarki). Ostatnio Chrome zaczął przetwarzać je w bardziej szczegółowych jednostkach: źródłach. Nazywamy klastry agentów ze źródłem jako kluczem. Jednak z powodu kosztów zasobów, Klastry agentów ze źródłem jako kluczem były stosowane heurystycznie tylko do ograniczonej liczby witryn.
Plan zakłada domyślne ustawienie źródła jako klucza we wszystkich klastrach agentów. Aby w tym celu musimy ograniczyć możliwości wymagające klastry źródłowe:
- (Tylko w Chrome) Nie możesz już wysyłać
SharedArrayBuffer
lubWebAssembly.Memory
do innych stron z innych domen w tej samej witrynie. Ta funkcja jest stosowana od wersji Chrome 92. - Nie możesz już wysyłać
WebAssembly.Module
za pomocąpostMessage()
. Ta zmiana został bardziej szczegółowy poniżej. - Nie można już ustawiać
document.domain
To starsza funkcja, która zwykle pozwala stronom z różnych domen w tej samej witrynie na synchronicznie uzyskują dostęp do DOM, ale w klastrach agentów ze źródłem jako kluczem jest wyłączona.
Po rozwiązaniu wszystkich powyższych zmian w Chrome będzie można używać agenta ze źródłem jako kluczem klastrów.
Więcej informacji o klastrach agentów ze źródłem jako kluczem znajdziesz w artykule Żądanie 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,
ustaw document.domain
jako tylko do odczytu. Zespół Chrome chce wprowadzić tę zmianę
w 2022 roku.
- 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łączono Niepochlebne