Ograniczenie udostępniania modułu Wasm do tej samej domeny

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 lub WebAssembly.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.

Zdjęcie: Markus Winkler włączono Niepochlebne