Przewodnik po włączeniu izolacji zasobów z innych domen

Izolacja od zasobów z innych domen umożliwia stronie internetowej korzystanie z zaawansowanych funkcji, takich jak SharedArrayBuffer. Z tego artykułu dowiesz się, jak włączyć izolację od zasobów z innych domen w swojej witrynie.

Z tego przewodnika dowiesz się, jak włączyć izolację od zasobów z innych domen. Izolacja od zasobów z innych domen jest wymagana, jeśli chcesz używać SharedArrayBuffer, performance.measureUserAgentSpecificMemory(), lub timera o wysokiej rozdzielczości i większej precyzji.

Jeśli chcesz włączyć izolację od zasobów współdzielonych, oceń, jaki wpływ będzie to miało na inne zasoby współdzielone w Twojej witrynie, np. na miejsca docelowe reklam.

Określanie, gdzie w witrynie używany jest obiekt SharedArrayBuffer

Od Chrome 92 funkcje, które używają obiektu SharedArrayBuffer nie będą działać bez izolacji od zasobów z innych domen. Jeśli ta strona została otwarta z powodu komunikatu o wycofaniu obiektu SharedArrayBuffer, prawdopodobnie Twoja witryna lub jeden z osadzonych w niej zasobów używa obiektu SharedArrayBuffer. Aby mieć pewność, że wycofanie nie spowoduje żadnych problemów w Twojej witrynie, zacznij od określenia, gdzie jest on używany.

Jeśli nie wiesz, gdzie w Twojej witrynie używany jest obiekt SharedArrayBuffer, możesz to sprawdzić na 2 sposoby:

  • Korzystanie z Narzędzi deweloperskich w Chrome
  • (Opcja zaawansowana) Korzystanie z raportowania o wycofaniu

Jeśli wiesz już, gdzie używasz obiektu SharedArrayBuffer, przejdź do sekcji Analizowanie wpływu izolacji od zasobów z innych domen.

Korzystanie z Narzędzi deweloperskich w Chrome

Narzędzia deweloperskie w Chrome umożliwiają deweloperom sprawdzanie witryn.

  1. Otwórz Narzędzia deweloperskie w Chrome na stronie, która Twoim zdaniem może używać obiektu SharedArrayBuffer.
  2. Wybierz panel Konsola.
  3. Jeśli strona używa obiektu SharedArrayBuffer, pojawi się ten komunikat:
    [Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around May 2021. See  for more details. common-bundle.js:535
  4. Nazwa pliku i numer wiersza na końcu wiadomości (np. common-bundle.js:535) wskazują, skąd pochodzi obiekt SharedArrayBuffer. Jeśli jest to biblioteka innej firmy, skontaktuj się z deweloperem, aby rozwiązać problem. Jeśli jest on zaimplementowany jako część Twojej witryny, postępuj zgodnie z instrukcjami poniżej, aby włączyć izolację od zasobów z innych domen.
Ostrzeżenie w konsoli Narzędzi deweloperskich, gdy obiekt SharedArrayBuffer jest używany bez izolacji od zasobów z innych domen.
Ostrzeżenie w konsoli Narzędzi deweloperskich, gdy obiekt SharedArrayBuffer jest używany bez izolacji od zasobów z innych domen.

(Opcja zaawansowana) Korzystanie z raportowania o wycofaniu

Niektóre przeglądarki mają funkcję raportowania o wycofywaniu interfejsów API do określonego punktu końcowego.

  1. Skonfiguruj serwer raportów o wycofaniu i uzyskaj adres URL raportowania. Możesz to zrobić, korzystając z usługi publicznej lub tworząc własną.
  2. Używając adresu URL, ustaw ten nagłówek HTTP na stronach, które potencjalnie obsługują SharedArrayBuffer.
    Report-To: {"group":"default","max_age":86400,"endpoints":[{"url":"THE_DEPRECATION_ENDPOINT_URL"}]}
  3. Gdy nagłówek zacznie się propagować, punkt końcowy, w którym się zarejestrowałeś(-aś), powinien zacząć zbierać raporty o wycofaniu.

Zobacz przykładową implementację.

Analizowanie wpływu izolacji od zasobów z innych domen

Czy nie byłoby wspaniale, gdyby można było ocenić wpływ włączenia izolacji od zasobów z innych domen na Twoją witrynę bez powodowania żadnych problemów? Nagłówki Cross-Origin-Opener-Policy-Report-Only i Cross-Origin-Embedder-Policy-Report-Only HTTP umożliwiają właśnie to.

  1. Ustaw Cross-Origin-Opener-Policy-Report-Only: same-origin w dokumencie najwyższego poziomu. Jak sama nazwa wskazuje, ten nagłówek wysyła tylko raporty o wpływie, jaki COOP: same-origin miałby na Twoją witrynę. Nie wyłączy on komunikacji z wyskakującymi okienkami.
  2. Skonfiguruj raportowanie i serwer WWW, aby odbierać i zapisywać raporty.
  3. Ustaw Cross-Origin-Embedder-Policy-Report-Only: require-corp w dokumencie najwyższego poziomu. Ten nagłówek umożliwia sprawdzenie wpływu włączenia COEP: require-corp bez wpływu na działanie witryny. Możesz skonfigurować ten nagłówek tak, aby wysyłał raporty do tego samego serwera raportowania, który został skonfigurowany w poprzednim kroku.

Łagodzenie wpływu izolacji od zasobów z innych domen

Po określeniu, które zasoby będą objęte izolacją od zasobów z innych domen, postępuj zgodnie z ogólnymi wytycznymi dotyczącymi wyrażania zgody na korzystanie z tych zasobów z innych domen:

  1. W przypadku zasobów współdzielenia, takich jak obrazy, skrypty, arkusze stylów, elementy iframe i inne, ustaw Cross-Origin-Resource-Policy:cross-origin nagłówek. W przypadku zasobów z tej samej witryny ustaw Cross-Origin-Resource-Policy:same-site nagłówek.
  2. W przypadku zasobów, które można wczytać za pomocą CORS, upewnij się, że jest on włączony, ustawiając atrybut crossorigin w tagu HTML (np. <img src="example.jpg" crossorigin>). W przypadku żądania pobierania JavaScript upewnij się, że request.mode jest ustawiony na cors.
  3. Jeśli chcesz używać zaawansowanych funkcji, takich jak SharedArrayBuffer, w wczytanym elemencie iframe, dodaj allow="cross-origin-isolated" do elementu <iframe>.
  4. Jeśli zasoby współdzielone wczytywane do elementów iframe lub skryptów roboczych obejmują kolejną warstwę elementów iframe lub skryptów roboczych, przed przejściem dalej zastosuj rekurencyjnie kroki opisane w tej sekcji.
  5. Gdy potwierdzisz, że wszystkie zasoby współdzielenia są objęte zgodą, ustaw nagłówek Cross-Origin-Embedder-Policy: require-corp w elementach iframe i skryptach roboczych (jest to wymagane niezależnie od tego, czy są to zasoby z tej samej domeny czy współdzielenia).
  6. Upewnij się, że nie ma wyskakujących okienek współdzielenia, które wymagają komunikacji za pomocą postMessage(). Nie można ich utrzymać w działaniu, gdy włączona jest izolacja od zasobów z innych domen. Możesz przenieść komunikację do innego dokumentu, który nie jest izolowany od zasobów z innych domen, lub użyć innej metody komunikacji (np. żądań HTTP).

Włączanie izolacji od zasobów z innych domen

Po złagodzeniu wpływu izolacji od zasobów z innych domen postępuj zgodnie z ogólnymi wytycznymi, aby włączyć izolację od zasobów z innych domen:

  1. Ustaw nagłówek Cross-Origin-Opener-Policy: same-origin w dokumencie najwyższego poziomu. Jeśli masz ustawiony nagłówek Cross-Origin-Opener-Policy-Report-Only: same-origin, zastąp go. Blokuje to komunikację między dokumentem najwyższego poziomu a jego wyskakującymi okienkami.
  2. Ustaw nagłówek Cross-Origin-Embedder-Policy: require-corp w dokumencie najwyższego poziomu. Jeśli masz ustawiony nagłówek Cross-Origin-Embedder-Policy-Report-Only: require-corp, zastąp go. Spowoduje to zablokowanie wczytywania zasobów współdzielenia, na które nie wyrazisz zgody.
  3. Sprawdź, czy self.crossOriginIsolated zwraca w konsoli wartość true, aby potwierdzić, że Twoja strona jest izolowana od zasobów z innych domen.

Zasoby