SXG to mechanizm przesyłania, który umożliwia uwierzytelnianie pochodzenia zasobu niezależnie od sposobu jego dostarczenia.
Signed Exchange (SXG) to mechanizm przesyłania, który umożliwia uwierzytelnianie źródła zasobu niezależnie od sposobu jego dostarczenia. Wdrożenie SXG może poprawić wykorzystanie największego wyrenderowania treści (LCP) przez włączenie z wyprzedzeniem pobierania z innych domen chroniących prywatność. Dodatkowo takie odłączenie przyspieszy pracę w różnych przypadkach użycia, takich jak korzystanie z internetu w trybie offline i wyświetlanie reklam z zewnętrznych pamięci podręcznych.
Ten artykuł zawiera wyczerpujące omówienie SXG: sposób jego działania, przypadki użycia i narzędzia.
Zgodność z przeglądarką
SXG jest obsługiwane przez przeglądarki oparte na Chromium (od wersji Chrome 73, Edge 79 i Opera 64).
Przegląd
Głównym przypadkiem użycia SXG jest użycie pamięci podręcznej do wstępnego pobierania i udostępniania treści podpisanych kryptograficznie przez źródło. Pomaga to przyspieszyć nawigację między witrynami w witrynach odsyłających, a jednocześnie zadbać o to, aby strony pozostały niezmienione i prawidłowo przypisane do źródła. Wszelkie informacje umożliwiające identyfikację osoby są ukryte, dopóki użytkownik nie przejdzie do witryny, co pozwala chronić jego prywatność. Wyszukiwarka Google należy do wczesnej wersji funkcji pobierania z wyprzedzeniem SXG. W przypadku witryn, które otrzymują dużą część ruchu z wyszukiwarki Google, SXG może być ważnym narzędziem umożliwiającym szybsze wczytywanie stron. Mamy nadzieję, że z czasem zmiana ta obejmie kolejne witryny odsyłające.
Jak to działa
Witryna podpisuje parę żądanie/odpowiedź („wymiana HTTP”) w taki sposób, że umożliwia przeglądarce zweryfikowanie pochodzenia i integralności treści niezależnie od sposobu jej dystrybucji. Dzięki temu przeglądarka może wyświetlić w pasku adresu URL witryny źródłowej zamiast adresu URL serwera, który dostarczył treści.
W przeszłości jedynym sposobem, aby witryna wykorzystywała firmy zewnętrzne do rozpowszechniania swoich treści przy zachowaniu atrybucji, była udostępnianie przez witrynę swoich certyfikatów SSL dystrybutorowi. Ma to wady w zakresie bezpieczeństwa oraz dodatkowo daleko od możliwości przeniesienia treści.
Format SXG
Plik SXG jest zawarty w pliku binarnym, który ma 2 główne komponenty: wymianę HTTP i sygnaturę, która chroni giełdę. Wymiana HTTP składa się z adresu URL żądania, informacji dotyczących negocjowania 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 podpisanej wymiany HTTP.
Obsługa personalizacji po stronie serwera
Komponent SXG zawierający nagłówek Vary: Cookie
będzie wyświetlany tylko użytkownikom, którzy nie mają plików cookie dla podpisanego adresu URL żądania. Jeśli zalogowany użytkownik Twojej witryny wyświetla inny kod HTML, możesz użyć tej funkcji, aby korzystać z elementów SXG bez wpływu na wygląd witryny. Dowiedz się więcej o personalizacji po stronie serwera z wykorzystaniem dynamicznego SXG.
Pakiety internetowe
SXG jest częścią bardziej rozbudowanej grupy specyfikacji pakietów internetowych. Innym ważnym elementem specyfikacji pakietów internetowych, oprócz SXG, jest pakiety internetowe („połączone giełdy HTTP”). Pakiety internetowe to zbiór zasobów HTTP i metadanych niezbędnych do interpretacji pakietu.
Relacja między SXG a pakietami internetowymi jest częstym problemem. SXG i pakiety internetowe to 2 odrębne technologie, które nie zależą od siebie nawzajem. Pakiety internetowe mogą być używane zarówno z podpisanymi, jak i niepodpisanymi giełdami. Popularnym celem zarówno SXG, jak i pakietów internetowych jest stworzenie formatu „pakietów internetowych”, który umożliwia udostępnianie witryn w całości do użytku offline.
Przyspieszanie wczytywania stron dzięki Signed Exchange
Włączenie Signed Exchange może przyspieszyć działanie stron internetowych, a tym samym wpłynąć na podstawowe wskaźniki internetowe witryny, w szczególności największe wyrenderowanie treści (LCP). Jako wczesna wersja wyszukiwarki Google korzysta z technologii SXG, aby zapewnić użytkownikom szybsze wczytywanie stron w przypadku stron wczytywanych ze strony wyników wyszukiwania.
Wyszukiwarka Google indeksuje i zapisuje w pamięci podręcznej obrazy SXG, gdy są dostępne, a potem pobiera z wyprzedzeniem te pliki, które użytkownik prawdopodobnie odwiedzi, np. stronę powiązaną z pierwszym wynikiem wyszukiwania.
SXG działa najlepiej w połączeniu z innymi optymalizacjami wydajności, takimi jak wykorzystanie sieci CDN i ograniczenie zasobów podrzędnych blokujących renderowanie. Po wdrożeniu postępuj zgodnie z tymi zaleceniami, aby zmaksymalizować korzyści LCP z pobierania SXG z wyprzedzeniem. W wielu przypadkach taka optymalizacja może spowodować niemal natychmiastowe wczytywanie strony przez wyszukiwarkę Google:
Wpływ technologii Signed Exchange
Z wcześniejszych eksperymentów zaobserwowaliśmy spadek LCP średnio o 300–400 ms w przypadku pobierania z wyprzedzeniem z obsługą SXG. Dzięki temu witryny uzyskują lepsze pierwsze wrażenie na użytkownikach, co często ma pozytywny wpływ na wyniki biznesowe.
Kilka globalnych marek i stron skorzystało już z technologii Signed Exchange. W ramach studium przypadku przyjrzyjmy się, jak wdrożenie Signed Exchange pomogło firmie RebelMouse, popularnemu systemowi zarządzania treścią (CMS), poprawiła wyniki klientów i poprawiła wyniki biznesowe:
- Narracja wzrosła o 41%
- Magazyn Paper Magazine odnotował wzrost liczby sesji na użytkownika o 27%
- Blog MLT skrócił czas wczytywania strony o 21%
Firma Cloudflare odkryła, że firma SXG poprawiła TTFB w 98% przetestowanych witryn i poprawiła LCP w 85% witryn przy średnim wzroście o ponad 20% w przypadku wczytywania stron odpowiednich dla SXG.
Indeksowanie
Wyszukiwarka Google nie ma różnicy w rankingu ani indeksacji strony na podstawie wyników SXG i innych niż SXG. SXG to mechanizm przesyłania – nie zmienia on treści źródłowych.
AMP
Treści AMP można wyświetlać za pomocą SXG. SXG zezwala na wstępne pobieranie i wyświetlanie treści AMP za pomocą kanonicznego adresu URL zamiast adresu URL AMP.AMP ma własne narzędzie do generowania plików SXG.Informacje o tym, jak wyświetlać strony AMP za pomocą Signed Exchange, znajdziesz na stronie amp.dev.
Debugowanie SXG za pomocą Narzędzi deweloperskich w Chrome
Aby zobaczyć SXG bezpośrednio w przeglądarce Chromium, otwórz Narzędzia deweloperskie, otwórz panel Network i wejdź na tę przykładową stronę wyszukiwania. Signed Exchange można zidentyfikować, wyszukując signed-exchange
w kolumnie Type (Typ).
Karta Preview (Podgląd) zawiera więcej informacji o zawartości SXG.
Narzędzia
Implementacja SXG obejmuje generowanie kodu SXG odpowiadającego danemu adresowi URL i wyświetlanie go użytkownikom zgłaszającym (zwykle robotom).
Certyfikaty
Do wygenerowania SXG potrzebujesz certyfikatu, który umożliwia podpisywanie SXG (chociaż niektóre narzędzia pozyskują go automatycznie). Ta strona zawiera listę urzędów certyfikacji, które mogą wystawiać certyfikaty tego typu. Certyfikaty mogą być uzyskiwane automatycznie od urzędu certyfikacji Google przy użyciu dowolnego klienta ACME. Serwer Web Packager ma wbudowanego klienta ACME. Sxg-rs już wkrótce.
Narzędzia SXG dostosowane do platformy
Te narzędzia obsługują określone stosy technologiczne. Jeśli korzystasz już z platformy obsługiwanej przez jedno z tych narzędzi, konfiguracja może być łatwiejsza niż w przypadku uniwersalnego narzędzia.
sxg-rs/cloudflare_worker
Działa na środowiskach roboczych Cloudflare.sxg-rs/fastly_compute
uruchamia się na koncie Fastly@Edge.Automatycznie podpisane giełdy to funkcja Cloudflare, która automatycznie pozyskuje certyfikaty i generuje podpisane wymiany.
Moduł NGINX SXG generuje i obsługuje komponenty SXG w witrynach korzystających z nginx. Instrukcje konfiguracji znajdziesz tutaj.
Filtr Envoy SXG generuje i wyświetla SXG w witrynach, które korzystają z Envoy.
Narzędzia SXG do zwykłych obciążeń
serwer HTTP sxg-rs
Serwer sxg-rshttp_server działa jako odwrotny serwer proxy do obsługi SXG. W przypadku żądań od robotów SXG http_server
podpisuje odpowiedzi z backendu i odpowiada za pomocą SXG. Instrukcje instalacji znajdziesz w pliku README.
Serwer internetowego programu pakującego
Serwer Web Packager (webpkgserver
) to alternatywa dla serwera http_sxg-rs napisanego w Go. Instrukcje konfigurowania serwera Web Packager znajdziesz w artykule Jak skonfigurować podpisane giełdy przy użyciu tego narzędzia.
Interfejs wiersza poleceń Web Packager
Interfejs wiersza poleceń Web Packager generuje kod 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 swój serwer i udostępnij z typem MIME application/signed-exchange;v=b3
. Dodatkowo musisz wyświetlać certyfikat SXG jako application/cert-chain+cbor
.
Biblioteki SXG
Aby utworzyć własny generator SXG, możesz użyć tych bibliotek:
sxg_rs
to biblioteka Rust do generowania SXG. Jest to najbogatsza biblioteka SXG, wykorzystywana jako podstawa narzędzicloudflare_worker
ifastly_compute
.libsxg
to minimalna biblioteka C do generowania SXG. Służy jako podstawa dla 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 referencyjna implementacja generowania SXG. Na jego podstawie tworzy się narzędzie interfejsu wiersza poleceńgen-signedexchange
i bardziej funkcjonalne narzędzia Web Packager.
Negocjowanie treści
Serwery powinny obsługiwać SXG, gdy nagłówek Accept wskazuje, że wartość q dla aplikacji/Sign-Exchange jest większa od lub równa wartości q dla tekstu/html. W praktyce oznacza to, że serwer pierwotny będzie udostępniał SXG robotom, ale nie przeglądarkom. Wiele z powyższych narzędzi używa ustawień domyślnych, ale w przypadku innych narzędzi do nagłówka Accept można dopasować nagłówek Accept, który ma być wyświetlany 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
Google SXG Cache ma interfejs API, za pomocą którego właściciele witryn mogą usuwać SXG z pamięci podręcznej, zanim wygasną z powodu Cache-Control: max-age
. Szczegółowe informacje znajdziesz w dokumentacji interfejsu API aktualizacji pamięci podręcznej.
Łączenie z SXG
Każda witryna może za pomocą tagów i zapisywać w pamięci podręcznej, wyświetlać i pobierać z wyprzedzeniem strony SXG, do których prowadzi link (o ile 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 pokazujemy, jak korzystać z nginx do rozpowszechniania obrazów SXG.
Unikalne zalety
SXG to jedna z wielu technologii, które umożliwiają wstępne pobieranie z innych domen. Wybierając technologię, konieczne może być kompromis między optymalizacją różnych aspektów korzystania z aplikacji. W sekcjach poniżej przedstawiamy kilka unikalnych wartości oferowanych przez SXG w zakresie możliwych rozwiązań. Te czynniki mogą się z czasem zmieniać w miarę ewoluowania dostępnych rozwiązań.
Mniej żądań do zrealizowania
W przypadku wstępnego pobierania z innych witryn Twój serwer może wymagać obsługi dodatkowych żądań. Odnosi się to do przypadków, gdy strona została wstępnie pobrana, ale użytkownik jej nie odwiedził lub bajty pobrane z wyprzedzeniem nie mogły zostać wyświetlone. W przypadku SXG liczba dodatkowych nieużywanych żądań może zostać znacznie zmniejszona:
- SXG są przechowywane w pamięci podręcznej i mogą być wysyłane do użytkowników, dopóki nie stracą ważności. W związku z tym wiele operacji pobierania z wyprzedzeniem może być obsługiwanych wyłącznie przez serwer pamięci podręcznej.
- Reklamy SXG mogą się wyświetlać użytkownikom w Twojej witrynie zarówno z plikami cookie, jak i bez nich. Dzięki temu rzadziej trzeba pobierać stronę po przejściu do innej witryny.
Poprawa szybkości działania strony
Możesz zauważyć dodatkową poprawę szybkości działania stron dzięki platformom pobierania z wyprzedzeniem i dostępnym obecnie funkcjom:
- SXG mogą być wyświetlane użytkownikom za pomocą plików cookie z Twojej witryny.
- SXG pobiera też wstępnie zasoby podrzędne stron, takie jak JavaScript, CSS, czcionki i obrazy, jeśli są określone za pomocą nagłówka
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 umożliwia weryfikację pochodzenia i prawidłowości zasobu niezależnie od sposobu jego dostarczenia. W rezultacie SXG mogą być rozpowszechniane przez osoby trzecie przy zachowaniu pełnej atrybucji wydawcy.