SXG to mechanizm dostarczania, który umożliwia uwierzytelnianie źródła zasobu niezależnie od sposobu jego dostarczenia.
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.
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.
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. 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](https://web.dev/static/articles/signed-exchanges/image/screenshot-showing-sxg-r-9a4f9df2440b3.png?authuser=0000&hl=pl)
Karta Podgląd zawiera więcej informacji o zawartości SXG.
![Zrzut ekranu przedstawiający „Podgląd” w przypadku SXG.](https://web.dev/static/articles/signed-exchanges/image/screenshot-the-preview-033e1253a3e1.png?authuser=0000&hl=pl)
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.
sxg-rs/cloudflare_worker
działa na Cloudflare Workers.sxg-rs/fastly_compute
działa na Fastly Compute@Edge.Podpisane automatycznie Giełdy to Funkcja Cloudflare, która automatycznie pobiera certyfikaty i generuje Signed Exchange.
Moduł NGINX SXG generuje i udostępnia SXG witrynom korzystającym z nginx. Konfiguracja znajdziesz tutaj.
Envoy SXG, Filtruj generuje i wyświetla SXG dla witryn, które korzystają Envoy.
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ędzicloudflare_worker
ifastly_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.