Izolacja od zasobów z innych domen umożliwia stronie internetowej korzystanie z zaawansowanych funkcji, takich jak zasób SharedSlateBuffer. Z tego artykułu dowiesz się, jak włączyć w witrynie izolację od zasobów z innych domen.
Z tego przewodnika dowiesz się, jak włączyć izolację zasobów z innych domen. Izolacja od zasobów z innych domen jest wymagana, jeśli chcesz używać SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
lub licznika czasu w wysokiej rozdzielczości z większą precyzją.
Jeśli chcesz włączyć izolację zasobów z innych domen, oceń wpływ, jaki będzie to miało na inne zasoby z tych domen w Twojej witrynie, takie jak miejsca docelowe reklam.
SharedArrayBuffer
SharedArrayBuffer
nie będą już działać bez izolacji od zasobów z innych domen. Jeśli trafiłeś na tę stronę z powodu komunikatu o wycofaniu SharedArrayBuffer
, prawdopodobnie Twoja witryna lub jeden z umieszczonych na niej zasobów używa SharedArrayBuffer
. Aby mieć pewność, że w witrynie nie pojawią się żadne błędy, zacznij od określenia, gdzie jest on używany.Jeśli nie masz pewności, w którym miejscu Twojej witryny został użyty element SharedArrayBuffer
, możesz to sprawdzić na 2 sposoby:
- Korzystanie z Narzędzi deweloperskich w Chrome
- (Zaawansowane) Korzystanie z raportów o wycofaniu
Jeśli wiesz już, gdzie używasz zasobu SharedArrayBuffer
, przejdź do sekcji Analizowanie wpływu izolacji zasobów z innych domen.
Korzystanie z Narzędzi deweloperskich w Chrome
Narzędzia deweloperskie w Chrome umożliwiają deweloperom sprawdzanie stron internetowych.
- Otwórz Narzędzia deweloperskie w Chrome na stronie, której prawdopodobnie używasz
SharedArrayBuffer
. - Wybierz panel Konsola.
- Jeśli strona korzysta z tagu
SharedArrayBuffer
, pojawi się ten komunikat:[Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around May 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details. common-bundle.js:535
- Nazwa pliku i numer wiersza na końcu wiadomości (np.
common-bundle.js:535
) wskazują, skąd pochodziSharedArrayBuffer
. Jeśli problem dotyczy biblioteki zewnętrznej, skontaktuj się z deweloperem. Jeśli jest zaimplementowany w witrynie, postępuj zgodnie z instrukcjami poniżej, aby włączyć izolację zasobów z innych domen.
(Zaawansowane) Korzystanie z raportów o wycofaniu
Niektóre przeglądarki mają funkcję raportowania obejmującą wycofywanie interfejsów API w określonym punkcie końcowym.
- Skonfiguruj serwer raportów o wycofaniu i uzyskaj adres URL do raportowania. Możesz to osiągnąć, korzystając z usługi publicznej lub tworząc ją samodzielnie.
- Za pomocą tego adresu URL ustaw ten nagłówek HTTP na stronach, które mogą wyświetlać reklamy
SharedArrayBuffer
.Report-To: {"group":"default","max_age":86400,"endpoints":[{"url":"THE_DEPRECATION_ENDPOINT_URL"}]}
- Gdy nagłówek zacznie się rozpowszechniać, punkt końcowy, w którym został zarejestrowany, powinien zacząć zbierać raporty o wycofaniu.
Zobacz przykładową implementację: https://cross-origin-isolation.glitch.me.
Analizowanie wpływu izolacji zasobów z innych domen
Czy nie lepiej byłoby ocenić wpływ, jaki na Twoją witrynę będzie miało
izolowanie zasobów z innych domen, nie powodując w ten sposób niczego zepsującego? Do tego służą nagłówki HTTP Cross-Origin-Opener-Policy-Report-Only
i Cross-Origin-Embedder-Policy-Report-Only
.
- 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, jakiCOOP: same-origin
może mieć na Twoją witrynę – nie wyłącza w rzeczywistości komunikacji z wyskakującymi okienkami. - Skonfigurowanie raportowania i skonfigurowanie serwera WWW do odbierania i zapisywania raportów.
- Ustaw
Cross-Origin-Embedder-Policy-Report-Only: require-corp
w dokumencie najwyższego poziomu. Przypominamy, że ten nagłówek pozwala sprawdzić wpływ włączeniaCOEP: require-corp
bez wywierania rzeczywistego 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.
Ograniczanie wpływu izolacji zasobów z innych domen
Gdy ustalisz, których zasobów dotyczy izolacja z innych domen, zapoznaj się z ogólnymi wytycznymi dotyczącymi udostępniania tych zasobów:
- W przypadku zasobów z innych domen, takich jak obrazy, skrypty, arkusze stylów, elementy iframe itp., ustaw nagłówek
Cross-Origin-Resource-Policy: cross-origin
. W zasobach z tej samej witryny ustaw nagłówekCross-Origin-Resource-Policy: same-site
. - Aby zasoby możliwe do wczytania za pomocą CORS, upewnij się, że są one włączone, ustawiając atrybut
crossorigin
w tagu HTML (np.<img src="example.jpg" crossorigin>
). W przypadku żądania pobierania JavaScriptu wartośćrequest.mode
musi być ustawiona nacors
. - Jeśli chcesz korzystać z zaawansowanych funkcji, takich jak
SharedArrayBuffer
, w załadowanym elemencie iframe, dołącz parametrallow="cross-origin-isolated"
do tagu<iframe>
. - Jeśli zasoby z innych domen wczytywane w elementach iframe lub skryptach instancji roboczych wymagają dodatkowej warstwy elementów iframe lub skryptów instancji roboczych, zanim przejdziesz dalej, rekurencyjnie zastosuj czynności opisane w tej sekcji.
- Gdy potwierdzisz, że wszystkie zasoby z innych domen są włączone, ustaw nagłówek
Cross-Origin-Embedder-Policy: require-corp
w elementach iframe i skryptach instancji roboczych (jest to wymagane niezależnie od pochodzenia z tej samej domeny czy z innych domen). - Upewnij się, że nie ma żadnych wyskakujących okienek z innych domen, które wymagają komunikacji przez
postMessage()
. Po włączeniu izolacji zasobów z innych domen nie można ich utrzymać. Komunikację można przenieść do innego dokumentu, który nie jest izolowany od zasobów z innych domen, lub użyć innej metody komunikacji (na przykład żądań HTTP).
Włącz izolację zasobów z innych domen
Gdy rozwiążesz problem za pomocą izolacji zasobów z innych domen, postępuj zgodnie z tymi ogólnymi wskazówkami dotyczącymi włączania izolacji zasobów z innych domen:
- Ustaw nagłówek
Cross-Origin-Opener-Policy: same-origin
w dokumencie najwyższego poziomu. Jeśli masz ustawionyCross-Origin-Opener-Policy-Report-Only: same-origin
, zastąp go. Spowoduje to zablokowanie komunikacji między dokumentem najwyższego poziomu a jego wyskakującymi okienkami. - Ustaw nagłówek
Cross-Origin-Embedder-Policy: require-corp
w dokumencie najwyższego poziomu. Jeśli masz ustawionyCross-Origin-Embedder-Policy-Report-Only: require-corp
, zastąp go. Spowoduje to zablokowanie wczytywania zasobów z innych domen, które nie zostały uwzględnione. - Sprawdź, czy
self.crossOriginIsolated
zwraca w konsoli parametrtrue
, aby sprawdzić, czy strona jest izolowana od zasobów z innych domen.