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 wykorzystaniem pamięci podręcznej innych 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 w przeglądarkach opartych na Chromium (od wersji 73 w Chrome, 79 w Edge i 64 w Operze).

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. Wszystkie informacje, które mogą umożliwić identyfikację użytkownika, są ukryte do momentu, gdy użytkownik wejdzie na daną stronę, co chroni jego prywatność. 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 zaczniemy stosować tę funkcję w przypadku większej liczby źródeł.

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ą

Wcześniej jedynym sposobem na to, aby witryna mogła korzystać z usług firmy zewnętrznej do dystrybucji treści przy zachowaniu atrybucji, było udostępnienie certyfikatów SSL dystrybutorowi. Ma to wady związane z bezpieczeństwem. Poza tym dalekie jest to od prawdziwej przenośnoś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

Plik SXG zawierający nagłówek Vary: Cookie będzie wyświetlany tylko 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 ich interpretacji.

Związek między SXG a pakietami internetowymi jest często źródłem nieporozumień. 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 pobierania wstępnego SXG dla LCP. W wielu przypadkach taka optymalizacja może skutkować niemal natychmiastowym wczytywaniem stron z wyszukiwarki Google:

Wpływ technologii Signed Exchange

Z naszych wcześniejszych eksperymentów wynika, że dzięki wstępnemu pobieraniu z użyciem SXG udało nam się zmniejszyć wartość LCP średnio o 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 przyjrzymy się, jak wdrożenie podpisanych wymian pomogło firmie RebelMouse, która oferuje popularny system zarządzania treścią (CMS), zwiększyć skuteczność i wyniki biznesowe klientów:

  • Firma Narcity 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 korzystania z SXG wyniosła ponad 20%.

Indeksowanie

Wyszukiwarka Google nie różnie się indeksowaniem ani pozycjonowaniem stron w wersji SXG i nie SXG. SXG to mechanizm dostarczania, który nie zmienia treści źródłowej.

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. Wymiana podpisana jest oznaczona w kolumnie Typ wartością signed-exchange.

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

Na karcie Podgląd znajdziesz więcej informacji o treściach SXG.

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

Narzędzia

Wdrożenie SXG polega na wygenerowaniu SXG odpowiadającego danemu adresowi URL, a następnie przesłaniu tego SXG do żądających (zwykle robotów).

Certyfikaty

Aby wygenerować SXG, musisz mieć certyfikat, który może podpisywać SXG, chociaż 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 pobrać automatycznie z urzędu certyfikacji Google za pomocą dowolnego klienta ACME. Serwer Web Packager ma wbudowanego klienta ACME, a sxg-rs wkrótce też go będzie miał.

Narzędzia SXG dla poszczególnych platform

Te narzędzia obsługują określone zestawy technologii. Jeśli korzystasz już z platformy obsługiwanej przez jedno z tych narzędzi, skonfigurowanie go może być łatwiejsze niż narzędzia ogólnego przeznaczenia.

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ć za pomocą 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

Narzędzie Web Packager CLI 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 go z typem MIME application/signed-exchange;v=b3. Dodatkowo musisz przesłać 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. Jest to najbardziej rozbudowana biblioteka SXG i służy jako podstawa narzędzi cloudflare_workerfastly_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 Go udostępniana przez specyfikację pakietu internetowego jako implementacja referencyjna generowania SXG. Jest on używany jako podstawa dla referencyjnego narzędzia wiersza poleceń gen-signedexchange oraz bardziej rozbudowanych 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.

Aktualizowanie interfejsu 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 , aby przechowywać w pamięci podręcznej, wyświetlać i pobierać 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.

Wyjątkowe 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 następnych sekcjach omawiamy kilka unikalnych wartości, które SXG zapewnia w ramach 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 przypadkom, gdy strona została pobrana w ramach wstępnego pobierania, ale użytkownik jej nie otworzył lub pobrany wcześniej bajt nie został mu wyświetlony. W przypadku SXG można znacznie ograniczyć liczbę niewykorzystanych żądań:

  • SXG są przechowywane w pamięci podręcznej i mogą być wysyłane do użytkowników do czasu wygaśnięcia. 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.

Optymalizacja szybkości strony

Możesz zauważyć dodatkowe przyspieszenie wczytywania stron dzięki 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

Podpisane wymiany to mechanizm dostarczania, który umożliwia weryfikację pochodzenia i prawidłowości 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