Signed Exchange (SXG)

SXG to mechanizm przesyłania, który umożliwia uwierzytelnianie pochodzenia zasobu niezależnie od sposobu jego dostarczenia.

Katie Hempenius
Katie Hempenius
Devin Mullins
Devin Mullins

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.

Diagram wyjaśniający, jak działa Signed Exchange. Przeglądarka komunikująca się z pamięcią podręczną, która komunikuje się z witryną docelową

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.

Oto przykład zdekodowanego pliku SXG.

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=&quot;https://test.web.app/ViFgi0WfQ-NotPJf8PBo2T5dEuZ13NdZefPybXq_HhE&quot;;
    date=1597680503;expires=1598285303;integrity=&quot;digest/mi-sha256-03&quot;;sig=<em>MEUCIQD5VqojZ1ujXXQaBt1CPKgJxuJTvFlIGLgkyNkC6d7LdAIgQUQ8lC4eaoxBjcVNKLrbS9kRMoCHKG67MweqNXy6wJg=</em>;
    validity-url=&quot;https://example.org/webpkg/validity&quot;
header integrity: sha256-Gl9bFHnNvHppKsv+bFEZwlYbbJ4vyf4MnaMMvTitTGQ=</p>

<p>The exchange has a valid signature.
payload [1256 bytes]:</p>
<pre class="prettyprint"><code>&lt;title&gt;SXG example&lt;/title&gt;
&lt;meta charset=&#34;utf-8&#34;&gt;
&lt;meta http-equiv=&#34;Content-type&#34; content=&#34;text/html; charset=utf-8&#34;&gt;
&lt;style type=&#34;text/css&#34;&gt;
body {
    background-color: #f0f0f2;
    margin: 0;
    padding: 0;
}
&lt;/style&gt;
</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).

Zrzut ekranu przedstawiający żądanie SXG w panelu „Network” (Sieć) w Narzędziach deweloperskich
Panel Sieć w Narzędziach deweloperskich

Karta Preview (Podgląd) zawiera więcej informacji o zawartości SXG.

Zrzut ekranu karty „Podgląd” w przypadku SXG
Karta Podgląd w Narzędziach deweloperskich

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.

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ędzi cloudflare_worker i fastly_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.

Więcej informacji