Signed Exchange (SXG)

SXG to mechanizm dostarczania, który umożliwia uwierzytelnianie źródła zasobu niezależnie od sposobu jego dostarczenia.

Katie Hempenius
Katie Hempenius
Devin Mullins
Devin Mullins

Signed Exchange (SXG) to mechanizm dostarczania, który umożliwia uwierzytelnianie źródła zasobu niezależnie od sposobu jego dostarczenia. Wdrożenie SXG może poprawić największe wyrenderowanie treści (LCP) przez włączenie zachowującego prywatności pobierania z innych domen. Poza tym takie rozwiązanie ułatwia różne zastosowania, takie jak korzystanie z internetu w trybie offline czy wyświetlanie z pamięci podręcznych innych firm.

Ten artykuł zawiera obszerne omówienie usługi SXG: jej działania, przypadków użycia i narzędzi.

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

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ę z witryn odsyłających z witryn odsyłających, a jednocześnie dba o to, aby strony pozostały niezmienione i prawidłowo przypisywane do ich pochodzenia. Wszelkie informacje umożliwiające identyfikację są ukryte, dopóki użytkownik nie przejdzie do witryny, co stanowi ochronę jego prywatności. Wyszukiwarka Google jako jedna z pierwszych osób korzysta z 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 ładowanie stron przez użytkowników. Mamy nadzieję, że z czasem ta zmiana obejmie kolejne strony odsyłające.

Jak to działa

Witryna podpisuje parę żądania/odpowiedzi („wymianę HTTP”) w sposób, który umożliwia sprawdzać pochodzenie i integralność treści niezależnie od sposób dystrybucji treści. W efekcie przeglądarka może wyświetlić adres URL adres witryny źródłowej na pasku adresu, a nie adres URL serwera, dostarczyła 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ą

Dawniej jedyny sposób do rozpowszechniania treści w witrynie innej firmy przy jednoczesnym zachowaniu że witryna udostępnia swoje certyfikaty SSL dystrybutora. Ma to zalety w zakresie bezpieczeństwa. Co więcej, jest to odległa perspektywa i przenośność treści.

Format SXG

Kod SXG jest zawarty w zakodowanym binarnie pliku, który zawiera dwa głównych komponentach: wymiana HTTP i podpis , który obejmuje wymianę. Wymiana HTTP składa się z adresu URL żądania, treści informacje o negocjacjach i odpowiedź 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. O SXG może być ważne przez maksymalnie 7 dni. Więcej informacji znajdziesz na nagłówek podpisu w technologii Signed HTTP Exchange, specyfikacja.

Obsługa personalizacji po stronie serwera

SXG zawierający nagłówek Vary: Cookie będzie widoczny tylko dla użytkowników, którzy tego nie robią pliki cookie dla adresu URL podpisanego żądania. Jeśli Twoja witryna wyświetla inny kod HTML wśród zalogowanych użytkowników, możesz użyć tej funkcji, aby skorzystać z SXG bez zmiany tego działania. Zobacz szczegóły na temat personalizacji po stronie serwera dzięki Dynamic SXG.

Tworzenie pakietów internetowych

SXG to część szerszego internetu Rodzina pakietów specyfikacji opakowania. Dodatkowo w przypadku SXG, innym ważnym elementem specyfikacji Web Packaging są pakiety internetowe. („pakiety wymiany HTTP”). Pakiety internetowe są zbiorem zasobów HTTP oraz metadanych niezbędnych do zinterpretowania pakietu.

Częstym powodem nieporozumień jest związek między usługami SXG a pakietami Web Bundle. SXG i Web Bundle to 2 różne technologie, które nie zależą od other – pakietów internetowych można używać zarówno z podpisanymi, jak i niepodpisanymi giełdami. Częstym celem SXG i pakietów Web Bundle jest stworzenie „pakietu internetowego” który pozwala na pełne udostępnianie witryn do użytku offline.

Przyspieszanie wczytywania stron dzięki usłudze Signed Exchange

Włączenie Signed Exchange może przyspieszyć działanie stron internetowych, a tym samym wpłynąć na jej podstawowe wskaźniki internetowe w szczególności największego wyrenderowania treści (LCP). Wyszukiwarka Google korzysta z technologii SXG, aby przyspieszyć wczytywanie stron wczytywanych ze strony wyników wyszukiwania.

Wyszukiwarka Google indeksuje i buforuje SXG, gdy są dostępne, oraz pobiera z wyprzedzeniem te komponenty, 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 wykorzystanie sieci CDN i ograniczenie zasobów podrzędnych blokujących renderowanie. Po wdrożeniu zastosuj się do tych rekomendacji, aby zmaksymalizować korzyści płynące z pobierania SXG z wyprzedzeniem przy LCP. W wielu przypadkach taka optymalizacja może spowodować, że strona zostanie wczytana niemal natychmiast z poziomu wyszukiwarki Google:

Wpływ na giełdę 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ą wywrzeć lepsze pierwsze wrażenie na użytkownikach, a często mają też pozytywny wpływ na wyniki firmy.

Kilka globalnych marek i witryn skorzystało już z technologii Signed Exchange. Studium przypadku pokazuje, jak wdrożenie Signed Exchange pomogło firmie RebelMouse, znanemu systemowi zarządzania treścią (CMS), poprawić skuteczność skuteczności i danych biznesowych:

  • Narracja poprawiła LCP o 41%
  • Magazyn Paper zauważył wzrost liczby sesji na użytkownika o 27%
  • Blog MLT skrócił czas wczytywania strony o 21%

Cloudflare wykazało, że firma SXG udoskonaliła funkcję TTFB w przypadku 98% przetestowanych witryn oraz poprawiła LCP w przypadku 85% witryn, przy czym mediana wzrostu liczby ładowań stron zgodnych z SXG wyniosła ponad 20%.

Indeksowanie

Reprezentacje strony w formacie SXG i innym niż SXG nie są klasyfikowane ani zindeksowane inaczej niż wyszukiwarka Google. SXG to ostateczna metoda dostarczania – i zmieniania treści.

AMP

Treści AMP można dostarczać za pomocą SXG. SXG umożliwia wstępne pobieranie treści AMP i wyświetlane z użyciem kanonicznego adresu URL zamiast adresu URL strony AMP.Strona AMP ma własną tooling do generowania SXG.Dowiedz się, jak wyświetlać strony AMP za pomocą Signed Exchange w amp.dev.

Debugowanie SXG za pomocą Narzędzi deweloperskich w Chrome

Aby bezpośrednio zapoznać się z SXG, użyj przeglądarki Chromium, otwórz Narzędzia deweloperskie, otwórz panel Network i wejdź na tę przykładową stronę wyszukiwania. Signed Exchange można rozpoznać, wyszukując signed-exchange w kolumnie Type (Typ).

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

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

Zrzut ekranu przedstawiający „Podgląd” w przypadku SXG.
Karta Podgląd w Narzędziach deweloperskich

Narzędzia

Implementacja SXG obejmuje generowanie SXG odpowiadającego danemu adresowi URL. a potem udostępnianiu SXG zgłaszającym (zwykle robotom).

Certyfikaty

Do wygenerowania SXG potrzebujesz certyfikatu, który może podpisywać umowy SXG, chociaż niektóre narzędzia pobierają je automatycznie. Ta strona zawiera listę urzędów certyfikacji, które mogą wystawiać tego typu certyfikaty. Certyfikaty można uzyskiwać automatycznie od urzędu certyfikacji Google przy użyciu dowolnego klienta ACME. Serwer pakietu internetowego ma wbudowanego klienta ACME – wkrótce będzie dostępny dla sxg-rs.

Narzędzia SXG dostosowane do konkretnej platformy

Te narzędzia obsługują konkretne stosy technologiczne. Jeśli używasz już platformy obsługiwanej przez jedno z tych narzędzi może być łatwiejsze do skonfigurowania niż ale jest to narzędzie ogólnego przeznaczenia.

Narzędzia SXG do zwykłych obciążeń

Serwer HTTP sxg-rs

SXG-RS http_server działa jako odwrotny serwer proxy dla obsługujące SXG. W przypadku żądań robotów SXG http_server podpisuje z backendu i wysłać w odpowiedzi SXG. Do montażu instrukcji można znaleźć w README.

Serwer pakietu internetowego

Narzędzie pakietu internetowego serwer, webpkgserver to alternatywa dla sxg-rs http_server napisanego w języku Go. Dla: instrukcje konfigurowania serwera Web Packager znajdziesz w sekcji Jak skonfigurować z giełd za pomocą systemu zarządzania pakietami internetowymi.

Interfejs wiersza poleceń systemu zarządzania pakietami internetowymi

Interfejs wiersza poleceń pakietu internetowego generuje interfejs SXG odpowiadające 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ępniaj typ MIME application/signed-exchange;v=b3. Dodatkowo musisz: udostępniać certyfikat SXG jako application/cert-chain+cbor.

Biblioteki SXG

Możesz użyć tych bibliotek do utworzenia własnego generatora SXG:

  • sxg_rs to biblioteka Rust dla w generowaniu SXG. Jest to najciekawsza biblioteka SXG, używana jako dla narzędzi cloudflare_worker i fastly_compute.

  • libsxg to minimalna biblioteka C dla w generowaniu SXG. Jest to podstawa modułu NGINX SXG oraz Filtr Envoy SXG.

  • go/signed-exchange to minimalna biblioteka w języku Go, dostępna w specyfikacji pakietu internetowego jako odwołanie implementacja w generowaniu SXG. Jest wykorzystywana jako podstawa referencyjnego interfejsu wiersza poleceń, gen-signedexchange i nowych funkcji Web Packager.

Negocjowanie treści

Serwery powinny obsługiwać SXG, gdy nagłówek Accept wskazuje, że wartość q aplikacji/podpisana-Exchange jest większa lub równa wartości q dla tekstu/html. W praktyce oznacza to, że serwer pierwotny będzie wyświetlać SXG robotom, ale nie przeglądarkom. Wiele z powyższych narzędzi robi to domyślnie, ale w przypadku innych możesz użyć następującego wyrażenia regularnego, aby dopasować nagłówek Accept w przypadku żądań, które powinny być wyświetlane jako SXG: http Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/

Ta rekomendacja zawiera przykłady dla 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óły znajdziesz w dokumentacji interfejsu API aktualizacji pamięci podręcznej.

Łączenie z SXG

Każda witryna może buforować, wyświetlać i pobierać z wyprzedzeniem SXG stron, do których prowadzą linki (o ile są dostępne), korzystając z tagów i : html <a href="https://example.com/article.html.sxg"> <link rel="prefetch" as="document" href="https://example.com/article.html.sxg"> Ten artykuł pokazuje, jak używać nginx do dystrybucji SXG.

Unikalne zalety

SXG to jedna z wielu możliwych technologii, które umożliwiają wstępne pobieranie z innych domen. Przy wyborze technologii warto wybrać kompromis 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ę z czasem zmieniać w miarę rozwoju dostępnych rozwiązań.

Mniej żądań do wyświetlenia

W przypadku wstępnego pobierania danych z innych witryn serwer może obsługiwać dodatkowe żądania. Odnosi się to do sytuacji, w których strona została wstępnie pobrana, ale użytkownik jej nie odwiedził lub nie udało się mu wyświetlić pobranych bajtów. W przypadku SXG liczba dodatkowych nieużywanych żądań może zostać znacznie ograniczona:

  • 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 pobierania z wyprzedzeniem może być obsługiwanych wyłącznie przez serwer pamięci podręcznej.
  • Usługi SXG mogą się wyświetlać użytkownikom zarówno z plikami cookie w Twojej witrynie, jak i bez nich. Dzięki temu zmniejsza się liczba sytuacji, w których strona będzie musiała zostać ponownie pobrana po przejściu nawigacji.

Przyspieszenie działania strony

Możesz zauważyć dodatkową poprawę szybkości stron ze względu na platformy i funkcje pobierania z wyprzedzeniem, które obsługuje:

  • SXG mogą być wyświetlane użytkownikom z plikami cookie dotyczącymi Twojej witryny.
  • SXG pobiera też z wyprzedzeniem zasoby podrzędne, takie jak JavaScript, CSS, czcionki i obrazy, jeśli określisz je za pomocą nagłówka Link.
  • W najbliższej przyszłości funkcja wstępnego pobierania SXG z wyszukiwarki Google będzie dostępna w przypadku większej liczby typów wyników wyszukiwania.

Podsumowanie

Signed Exchange to mechanizm dostarczania, który umożliwia weryfikację pochodzenie i prawidłowość zasobu niezależnie od jego dostarczone. W związku z tym SXG mogą być dystrybuowane przez inne firmy, zachowanie pełnej atrybucji wydawcy.

Więcej informacji