SXG to mechanizm dostarczania, który umożliwia uwierzytelnianie pochodzenia zasobu niezależnie od sposobu jego dostarczenia.
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.
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.
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. 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 witryn i poprawił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
.
Na karcie Podgląd znajdziesz więcej informacji o treściach SXG.
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.
sxg-rs/cloudflare_worker
działa w Cloudflare Workers.sxg-rs/fastly_compute
działa w Fastly Compute@Edge.Automatyczne wymiany z podpisaniem to funkcja Cloudflare, która automatycznie pobiera certyfikaty i generuje wymiany z podpisaniem.
Moduł NGINX SXG generuje i udostępnia pliki SXG w przypadku witryn, które korzystają z nginx. Instrukcje konfiguracji znajdziesz tutaj.
Filtr Envoy SXG generuje i przekazuje SXG-i do witryn, które korzystają z Envoy.
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ędzicloudflare_worker
ifastly_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 i , 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.