SXG to mechanizm dostarczania, który umożliwia uwierzytelnianie pochodzenia zasobu niezależnie od sposobu jego dostarczenia.
Podpisane wymiany (SXG) to mechanizm dostarczania, który umożliwia uwierzytelnianie pochodzenia zasobu niezależnie od sposobu jego dostarczenia. Wdrożenie SXG może poprawić wynik LCP, ponieważ umożliwia pobieranie z wyprzedzeniem z zachowaniem prywatności w różnych domenach. Poza tym rozdzielenie umożliwia stosowanie różnych przypadków użycia, takich jak korzystanie z internetu offline i obsługa z użyciem pamięci podręcznej zewnętrznych firm.
Z tego artykułu dowiesz się wszystkiego o SXG: jak działa, jakie ma zastosowania i jakie narzędzia zawiera.
Zgodność z przeglądarką
SXG jest obsługiwany przez przeglądarki oparte na Chromium (od wersji Chrome 73, Edge 79 i Opera 64).
Omówienie
W głównym przypadku użycia SXG używa pamięci podręcznej do pobierania z wyprzedzeniem i przesyłania treści, które zostały podpisane kryptograficznie przez źródło. Dzięki temu możesz przyspieszyć nawigację między domenami z witryn odsyłających, a zarazem zapewnić, że strony pozostaną niezmienione i właściwie przypisane do ich źródła. Wszelkie informacje potencjalnie umożliwiające identyfikację są ukryte, dopóki użytkownik nie przejdzie do witryny, co stanowi ochronę jego prywatności. Wyszukiwarka Google jest jednym z pierwszych serwisów, które korzystają z możliwości pobierania z wyprzedzeniem SXG. W przypadku witryn, które otrzymują dużą część ruchu z wyszukiwarki Google, SXG może być ważnym narzędziem do szybszego wczytywania stron przez użytkowników. Mamy nadzieję, że z czasem ta zmiana będzie obejmowała więcej stron odsyłających.
Jak to działa
Witryna podpisuje parę żądanie/odpowiedź („wymianę HTTP”) w sposób umożliwiający przeglądarce weryfikację pochodzenia i integralności treści niezależnie od tego, w jaki sposób zostały one rozpowszechnione. W rezultacie przeglądarka może wyświetlać na pasku adresu adres URL witryny źródłowej, a nie adres URL serwera, który dostarczył treści.
W przeszłości jedynym sposobem udostępniania treści przez stronę trzecią z zachowaniem atrybucji przez witrynę z zachowaniem atrybucji było udostępnienie certyfikatów SSL dystrybutorowi. Ma to pewne wady dotyczące bezpieczeństwa, ale to też bardzo duża różnica w stosunku do stopnia mobilności treści.
Format SXG
Plik SXG jest zaszyfrowany w pliku binarnym, który zawiera 2 główne komponenty: wymianę HTTP i podpis, który obejmuje tę wymianę. Wymiana danych w ramach HTTP składa się z adresu URL żądania, informacji o negocjowaniu treści i odpowiedzi HTTP.
format version: 1b3 request: method: GET uri: https://example.org/ headers: response: status: 200 headers: Cache-Control: max-age=604800 Digest: mi-sha256-03=kcwVP6aOwYmA/j9JbUU0GbuiZdnjaBVB/1ag6miNUMY= Expires: Mon, 24 Aug 2020 16:08:24 GMT Content-Type: text/html; charset=UTF-8 Content-Encoding: mi-sha256-03 Date: Mon, 17 Aug 2020 16:08:24 GMT Vary: Accept-Encoding signature: label;cert-sha256=<em>ViFgi0WfQ+NotPJf8PBo2T5dEuZ13NdZefPybXq/HhE=</em>; cert-url="https://test.web.app/ViFgi0WfQ-NotPJf8PBo2T5dEuZ13NdZefPybXq_HhE"; date=1597680503;expires=1598285303;integrity="digest/mi-sha256-03";sig=<em>MEUCIQD5VqojZ1ujXXQaBt1CPKgJxuJTvFlIGLgkyNkC6d7LdAIgQUQ8lC4eaoxBjcVNKLrbS9kRMoCHKG67MweqNXy6wJg=</em>; validity-url="https://example.org/webpkg/validity" header integrity: sha256-Gl9bFHnNvHppKsv+bFEZwlYbbJ4vyf4MnaMMvTitTGQ=</p> <p>The exchange has a valid signature. payload [1256 bytes]:</p> <pre class="prettyprint"><code><title>SXG example</title> <meta charset="utf-8"> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <style type="text/css"> body { background-color: #f0f0f2; margin: 0; padding: 0; } </style> </code></pre> <div> <h1>Hello</h1> </div> <p>
Parametr expires
w podpisie wskazuje datę ważności SXG. SXG może być ważny przez maksymalnie 7 dni. Więcej informacji o nagłówku podpisu znajdziesz w specyfikacji wymian HTTP z podpisem.
Obsługa personalizacji po stronie serwera
SXG zawierający nagłówek Vary: Cookie
będzie wyświetlany tylko tym użytkownikom, którzy nie mają plików cookie dla adresu URL podpisanego żądania. Jeśli Twoja witryna wyświetla użytkownikom po zalogowaniu się inny kod HTML, możesz użyć tej funkcji, aby korzystać z SXG, nie zmieniając tego doświadczenia. Szczegółowe informacje o personalizacji po stronie serwera za pomocą dynamicznych reklam SXG.
Pakowanie do internetu
SXG należy do szerszej rodziny specyfikacji Web Packaging. Oprócz SXG innym ważnym elementem specyfikacji opakowania internetowego są pakiety internetowe („zbiory wymiany HTTP”). Pakiety internetowe to zbiór zasobów HTTP oraz metadanych niezbędnych do interpretacji pakietu.
Częstym powodem nieporozumień jest związek między usługami SXG a pakietami Web Bundle. SXG i pakiety internetowe to 2 różne technologie, które nie są od siebie zależne – pakiet internetowy może być używany zarówno w przypadku wymian podpisanych, jak i niepodpisanych. Celem, który jest wspólny dla technologii SXG i pakietów internetowych, jest utworzenie formatu „pakowania stron internetowych”, który umożliwia udostępnianie całych stron w celu ich przeglądania w trybie offline.
Przyspieszanie wczytywania stron dzięki umowom Signed Exchange
Włączenie podpisanych wymian może przyspieszyć działanie strony internetowej i w ten sposób wpłynąć na podstawowe wskaźniki internetowe Twojej witryny, zwłaszcza na największe wyrenderowanie treści (LCP). Jako jeden z pierwszych usług wyszukiwarka Google korzysta z SXG, aby zapewnić użytkownikom szybsze wczytywanie stron otwieranych ze strony wyników wyszukiwania.
Wyszukiwarka Google indeksuje i zapisują w pamięci podręcznej SXG, gdy są dostępne, oraz pobiera z wyprzedzeniem SXG, które użytkownik prawdopodobnie odwiedzi – np. stronę odpowiadającą pierwszemu wynikowi wyszukiwania.
SXG działa najlepiej w połączeniu z innymi optymalizacjami wydajności, takimi jak korzystanie z CDN-ów i ograniczanie liczby zasobów blokujących renderowanie. Po wdrożeniu postępuj zgodnie z tymi zaleceniami, aby zmaksymalizować korzyści z poprzedniego pobierania SXG dla LCP. W wielu przypadkach taka optymalizacja może spowodować, że strona zostanie wczytana niemal natychmiast z poziomu wyszukiwarki Google:
Wpływ technologii Signed Exchange
Na podstawie wcześniejszych eksperymentów zaobserwowaliśmy, że w przypadku pobierania z wyprzedzeniem z obsługą SXG wartość LCP wynosi średnio 300–400 ms. Dzięki temu witryny mogą wywierać na użytkowników lepsze pierwsze wrażenie i często pozytywnie wpływać na dane biznesowe.
Kilka globalnych marek i witryn korzysta już z usług Signed Exchange. W ramach tego case study przyjrzyjmy się, jak wdrożenie podpisanych wymian pomogło firmie RebelMouse, która oferuje popularny system zarządzania treścią (CMS), w zwiększeniu skuteczności i wyników biznesowych klientów:
- Narracja poprawiła LCP o 41%
- Paper Magazine zauważył wzrost liczby sesji na użytkownika o 27%
- Blog MLT skrócił czas wczytywania strony o 21%
Firma Cloudflare stwierdziła, że technologia SXG poprawiła TTFB w 98% testowanych witryn i poprawiła LCP w 85% witryn, a średnia poprawa w przypadku wczytywania stron kwalifikujących się do użycia SXG wyniosła ponad 20%.
Indeksowanie
Wyszukiwarka Google nie stosuje różnych reprezentacji strony ani reprezentacji SXG i innych niż SXG. SXG to mechanizm dostarczania – nie zmienia on treści.
AMP
Treści AMP można dostarczać za pomocą SXG. SXG umożliwia wstępne pobieranie i wyświetlanie treści AMP za pomocą ich kanonicznego adresu URL, a nie adresu URL AMP. AMP ma własne narzędzia do generowania SXG. Dowiedz się, jak wyświetlać strony AMP za pomocą podpisanych wymian na stronie amp.dev.
Debugowanie plików SXG za pomocą Narzędzi deweloperskich w Chrome
Aby zobaczyć SXG na własne oczy, otwórz przeglądarkę Chromium, przejdź do Narzędzi deweloperskich, otwórz panel Sieć i odwiedź tę przykładową stronę wyszukiwania. Signed Exchange można rozpoznać, wyszukując signed-exchange
w kolumnie Type (Typ).
Karta Podgląd zawiera więcej informacji o zawartości SXG.
Narzędzia
Implementacja SXG obejmuje wygenerowanie raportu SXG odpowiadającego danemu adresowi URL, a następnie udostępnienie go żądającym (zwykle robotom).
Certyfikaty
Aby wygenerować SXG, musisz mieć certyfikat, który może podpisywać SXG, choć niektóre narzędzia pobierają je automatycznie. Na tej stronie znajdziesz listę urzędów certyfikacji, które mogą wystawiać certyfikaty tego typu. Certyfikaty można uzyskiwać automatycznie od urzędu certyfikacji Google przy użyciu dowolnego klienta ACME. Serwer Web Packager ma wbudowanego klienta ACME, a sxg-rs będzie go mieć wkrótce.
Narzędzia SXG dla poszczególnych platform
Te narzędzia obsługują konkretne stosy technologiczne. Jeśli korzystasz już z platformy obsługiwanej przez jedno z tych narzędzi, skonfigurowanie go może być łatwiejsze niż w przypadku narzędzia uniwersalnego.
sxg-rs/cloudflare_worker
działa w Cloudflare Workers.sxg-rs/fastly_compute
działa w Fastly Compute@Edge.Automatyczne podpisane wymiany to funkcja Cloudflare, która automatycznie pobiera certyfikaty i generuje podpisane wymiany.
Moduł NGINX SXG generuje i udostępnia pliki SXG w przypadku witryn, które korzystają z nginx. Instrukcje konfiguracji znajdziesz tutaj.
Envoy SXG Filter generuje i wyświetla SXG-i dla witryn, które korzystają z Envoy.
Narzędzia SXG do ogólnych celów
Serwer HTTP sxg-rs
Usługa sxg-rs
http_server działa jako serwer proxy odwrotny do obsługi SXG. W przypadku żądań od robotów SXG usługa http_server
będzie podpisywać odpowiedzi z backendu i odpowiadać w formacie SXG. Instrukcje instalacji znajdziesz w pliku README.
Serwer Web Packager
Serwer Web Packager,
webpkgserver
to alternatywa dla serwera sxg-rs http_server, napisanego w języku Go. Instrukcje konfigurowania serwera Web Packager znajdziesz w artykule Jak skonfigurować strony w technologii Signed Exchange za pomocą Web Packager.
Web Packager CLI
Interfejs wiersza poleceń pakietu internetowego generuje SXG odpowiadający danemu adresowi URL.
webpackager \
--private\_key=private.key \
--cert\_url=https://example.com/certificate.cbor \
--url=https://example.com
Po wygenerowaniu pliku SXG prześlij go na serwer i przekazuj z typem MIME application/signed-exchange;v=b3
. Dodatkowo musisz wyświetlać certyfikat SXG jako application/cert-chain+cbor
.
Biblioteki SXG
Do tworzenia własnych generatorów SXG możesz używać tych bibliotek:
sxg_rs
to biblioteka Rust do generowania SXG. To najbogatsza biblioteka SXG, która służy jako podstawa narzędzicloudflare_worker
ifastly_compute
.libsxg
to minimalna biblioteka C do generowania plików SXG. Jest on używany jako podstawa modułu NGINX SXG i filtra Envoy SXG.go/signed-exchange
to minimalna biblioteka w języku Go udostępniana w specyfikacji pakietu internetowego jako implementacja referencyjna do generowania komponentów SXG. Jest to baza referencyjna interfejsu wiersza poleceńgen-signedexchange
i bardziej funkcjonalnych narzędzi Web Packager.
Negocjacje dotyczące treści
Serwery powinny wyświetlać SXG, gdy nagłówek Accept wskazuje, że wartość q dla application/signed-exchange jest większa lub równa wartości q dla text/html. W praktyce oznacza to, że serwer źródłowy będzie udostępniać SXG robotom, ale nie przeglądarkom. Wiele z wymienionych powyżej narzędzi robi to domyślnie, ale w przypadku innych narzędzi można użyć tego wyrażenia regularnego, aby dopasować nagłówek Accept żądań, które powinny być obsługiwane jako SXG:
http
Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/
Ta rekomendacja zawiera przykłady dotyczące Apache i nginx.
Zaktualizuj interfejs API pamięci podręcznej
Pamięć podręczna Google SXG ma interfejs API, którego właściciele witryn mogą używać do usuwania SXG z pamięci podręcznej, zanim wygasną z powodu Cache-Control: max-age
. Więcej informacji znajdziesz w dokumentacji interfejsu update-cache API.
Łączenie z SXG
Każda witryna może używać tagów i do przechowywania w pamięci podręcznej, wyświetlania i pobierania z wyprzedzeniem SXG stron, do których się odwołuje (jeśli są dostępne).html
<a href="https://example.com/article.html.sxg">
<link rel="prefetch" as="document" href="https://example.com/article.html.sxg">
W tym artykule znajdziesz informacje o tym, jak używać nginx do dystrybucji SXG.
Unikalne zalety
SXG to jedna z wielu możliwych technologii umożliwiających pobieranie z wyprzedzeniem z wielu źródeł. Wybierając technologię, musisz dokonać kompromisu między optymalizacją różnych aspektów. W kolejnych sekcjach przedstawiamy kilka unikalnych wartości dostępnych w SXG w obszarze możliwych rozwiązań. Te czynniki mogą się zmieniać w czasie, gdy ewoluuje przestrzeń dostępnych rozwiązań.
Mniej żądań do obsługi
W przypadku wstępnego wczytywania w wielu witrynach serwer może wymagać wysłania dodatkowych żądań. Odpowiada to sytuacjom, w których strona została pobrana wstępnie, ale użytkownik jej nie otworzył lub pobrany wstępnie bajt nie mógł zostać wyświetlony użytkownikowi. W przypadku SXG można znacznie ograniczyć liczbę niewykorzystanych żądań:
- Klucze SXG są przechowywane w pamięci podręcznej i mogą być wysyłane do użytkowników, dopóki nie wygasną. Dzięki temu wiele operacji wstępnego pobierania może być obsługiwanych wyłącznie przez serwer pamięci podręcznej.
- Pliki SXG mogą być wyświetlane użytkownikom zarówno z plikami cookie, jak i bez nich. W związku z tym rzadziej będzie trzeba ponownie pobierać stronę po przejściu na inną.
Optymalizacja szybkości strony
Możesz zauważyć dodatkowe przyspieszenie wczytywania stron dzięki tym funkcjom i powierzchniom, które są obecnie obsługiwane przez funkcję wstępnego pobierania:
- Pliki SXG mogą być wyświetlane użytkownikom, którzy mają pliki cookie Twojej witryny.
- SXG pobiera też wstępnie podzasoby dla stron, takie jak JavaScript, CSS, czcionki i obrazy, gdy są one określone w nagłówku
Link
. - W najbliższej przyszłości pobieranie z wyprzedzeniem SXG z wyszukiwarki Google będzie dostępne w przypadku większej liczby typów wyników wyszukiwania.
Podsumowanie
Signed Exchange to mechanizm dostarczania, który pozwala zweryfikować źródło i prawidłowość zasobu niezależnie od sposobu jego dostarczenia. W efekcie SXG mogą być rozpowszechniane przez osoby trzecie przy zachowaniu pełnej atrybucji wydawcy.