Signed Exchange (SXG)

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

Katie Hempenius
Katie Hempenius
Devin Mullins
Devin Mullins

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.

Diagram pokazujący, jak działają podpisane wymiany Przeglądarka komunikuje się z pamięcią podręczną, która komunikuje się z witryną docelową

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.

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 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 witrynpoprawił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).

Zrzut ekranu pokazujący żądanie SXG w panelu „Sieć” w Narzędziach dla programistów
Panel Sieć w Narzędziach deweloperskich

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

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

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.

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

Więcej informacji