SXG – это механизм доставки, который позволяет подтвердить происхождение ресурса независимо от того, как он был доставлен.
Обмен данными с подписью (SXG) – это механизм доставки, который позволяет подтвердить источник ресурса независимо от того, как он был доставлен. Внедрение SXG может улучшить показатель Largest Contentful Paint (LCP) за счет включения междоменной предзагрузки с сохранением конфиденциальности. Кроме того, это разделение позволяет реализовать различные сценарии использования, такие как работа в интернете в автономном режиме и показ из сторонних кешей.
В этой статье подробно рассказывается о том, что такое SXG, как работает эта технология, в каких случаях она применяется и какие инструменты для нее существуют.
Совместимость браузеров
SXG поддерживается браузерами на основе Chromium (начиная с Chrome 73, Edge 79 и Opera 64).
Обзор
Основное назначение SXG – использование кеша для предварительной загрузки и показа контента, который был криптографически подписан источником. Это помогает ускорить перекрестные переходы с сайтов-источников ссылки, а также гарантирует, что страницы не будут изменены и будут правильно соотнесены с их источником. Любая идентифицирующая информация скрыта до тех пор, пока пользователь не перейдет на сайт, что защищает его конфиденциальность. Google Поиск – один из первых участников программы раннего доступа к предзагрузке SXG. Если ваш сайт получает значительную часть трафика из Google Поиска, то SXG может стать для вас важным инструментом, позволяющим ускорить загрузку страниц. Со временем мы надеемся расширить эту функцию на другие источники переходов.
Принцип работы
Сайт подписывает пару "запрос – ответ" (HTTP-обмен) таким образом, чтобы браузер мог проверить происхождение и целостность контента независимо от того, как он распространялся. В результате в адресной строке браузера может отображаться URL исходного сайта, а не сервера, который предоставил контент.

Раньше единственным способом распространять контент через сторонние сервисы, сохраняя атрибуцию, было предоставление им SSL-сертификатов. Это не только небезопасно, но и не позволяет сделать контент по-настоящему переносимым.
Формат SXG
SXG инкапсулируется в двоично-кодированный файл, который состоит из двух основных компонентов: обмена данными по протоколу HTTP и подписи, которая охватывает этот обмен. Обмен данными по протоколу HTTP включает URL запроса, информацию о согласовании контента и 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>Параметр expires в подписи указывает на срок действия SXG. SXG-обмен может быть действителен не более семи дней. Дополнительную информацию о заголовке подписи можно найти в спецификации HTTP-обмена с подписью.
Поддержка персонализации на стороне сервера
SXG-файл, содержащий заголовок Vary: Cookie, будет показываться только пользователям, у которых нет файлов cookie для URL подписанного запроса. Если на вашем сайте зарегистрированным пользователям показывается другой HTML-код, вы можете использовать эту функцию, чтобы воспользоваться преимуществами SXG, не меняя интерфейс. Подробнее о персонализации на стороне сервера с помощью динамических SXG…
Web Packaging
SXG – это часть более широкого набора спецификаций Web Packaging. Помимо SXG, другим важным компонентом спецификации Web Packaging являются веб-пакеты (пакеты обмена данными по протоколу HTTP). Веб-пакеты – это наборы ресурсов HTTP и метаданных, необходимых для интерпретации пакета.
Связь между SXG и веб-пакетами часто вызывает недопонимание. SXG и веб-пакеты – это две разные технологии, которые не зависят друг от друга. Веб-пакеты можно использовать как с подписанными, так и с неподписанными обменами. Общая цель SXG и веб-пакетов – создание формата веб-пакетов, который позволяет делиться сайтами целиком для использования в офлайн-режиме.
Как ускорить загрузку страниц с помощью обмена с подписью
Включение обмена с подписью может помочь повысить скорость загрузки веб-страниц и тем самым улучшить показатели Core Web Vitals, в частности Largest Contentful Paint (LCP). Google Поиск – один из первых сервисов, в которых была реализована поддержка SXG. Благодаря этому страницы, на которые пользователи переходят из результатов поиска, загружаются быстрее.
Google Поиск сканирует и кеширует SXG, когда они доступны, и предварительно загружает SXG, которые пользователь, скорее всего, посетит, например страницу, соответствующую первому результату поиска.
SXG лучше всего работает в тандеме с другими оптимизациями производительности, такими как использование CDN и сокращение количества подресурсов, блокирующих рендеринг. После внедрения следуйте этим рекомендациям, чтобы максимально повысить LCP за счет предварительной загрузки SXG. Во многих случаях такая оптимизация позволяет добиться практически мгновенной загрузки страниц, открываемых из Google Поиска.
Влияние обмена с подписью
Прошлые эксперименты показали, что предварительная загрузка с поддержкой SXG позволяет сократить время отрисовки самого крупного контента (LCP) в среднем на 300–400 мс. Это помогает сайтам производить лучшее первое впечатление на пользователей и часто положительно влияет на бизнес-показатели.
Несколько глобальных брендов и сайтов уже оценили преимущества подписанных обменов. Давайте рассмотрим, как внедрение подписанных обменов помогло RebelMouse, известной системе управления контентом (CMS), улучшить производительность и бизнес-показатели своих клиентов:
- Компания Narcity улучшила показатель LCP на 41%.
- Количество сеансов на пользователя у Paper Magazine выросло на 27 %.
- Блог MLT сократил время загрузки страниц на 21%
Специалисты Cloudflare выяснили, что SXG улучшает TTFB для 98% сайтов, которые они тестировали, и улучшает LCP для 85% сайтов, при этом медианное улучшение составляет более 20% при загрузке страниц, соответствующих требованиям SXG.
Индексирование
Google Поиск не ранжирует и не индексирует версии страниц с SXG и без SXG по-разному. SXG – это механизм доставки, который не меняет контент.
AMP
AMP-контент можно передавать с помощью SXG. SXG позволяет предварительно загружать AMP-контент и показывать его с использованием канонического URL, а не URL AMP-страницы.Для создания SXG в AMP есть отдельные инструменты. Узнайте, как показывать AMP-страницы с помощью обмена данными с подписью, на сайте amp.dev.
Отладка SXG с помощью инструментов разработчика Chrome
Чтобы увидеть SXG, откройте браузер Chromium, запустите инструменты разработчика, перейдите на панель "Сеть" и откройте эту поисковую страницу. Обмен данными с подписью можно определить по значению signed-exchange в столбце Тип.
На вкладке Предварительный просмотр можно получить больше информации о содержимом SXG.
Инструменты
Чтобы реализовать SXG, нужно сгенерировать SXG, соответствующий определенному URL, а затем предоставить этот SXG запрашивающим сторонам (обычно поисковым роботам).
Сертификаты
Чтобы создать SXG, вам понадобится сертификат, который может подписывать SXG. Некоторые инструменты получают такие сертификаты автоматически. Список центров сертификации, которые могут выдать такой сертификат, приведен на этой странице. Сертификаты можно автоматически получать от центра сертификации Google с помощью любого клиента ACME. В Web Packager Server есть встроенный клиент ACME, а в sxg-rs он скоро появится.
Инструменты SXG для определенных платформ
Эти инструменты поддерживают определенные стеки технологий. Если вы уже используете платформу, поддерживаемую одним из этих инструментов, вам может быть проще настроить его, чем инструмент общего назначения.
sxg-rs/cloudflare_workerработает на платформе Cloudflare Workers.sxg-rs/fastly_computeработает на платформе Fastly Compute@Edge.Автоматический обмен с подписью – это функция Cloudflare, которая автоматически получает сертификаты и генерирует обмен с подписью.
Модуль SXG для nginx генерирует и передает SXG-файлы для сайтов, использующих nginx. Подробнее…
Envoy SXG Filter генерирует и предоставляет SXG для сайтов, использующих Envoy.
Инструменты общего назначения для работы с SXG
HTTP-сервер sxg-rs
sxg-rs http_server действует как обратный прокси-сервер для показа SXG. Для запросов от поисковых роботов SXG http_server будет подписывать ответы от серверной части и отвечать с помощью SXG. Инструкции по установке приведены в файле README.
Сервер Web Packager
Сервер Web Packager (webpkgserver) – это альтернатива sxg-rs http_server, написанная на языке Go. Инструкции по настройке сервера Web Packager приведены в статье Как настроить обмен данными с подписью с помощью Web Packager.
Интерфейс командной строки Web Packager
Интерфейс командной строки Web Packager генерирует SXG-файл, соответствующий заданному URL.
webpackager \
--private\_key=private.key \
--cert\_url=https://example.com/certificate.cbor \
--url=https://example.com
После создания SXG-файла загрузите его на сервер и передавайте с MIME-типом application/signed-exchange;v=b3. Кроме того, вам нужно будет использовать сертификат SXG в качестве application/cert-chain+cbor.
Библиотеки SXG
Для создания собственного генератора SXG можно использовать следующие библиотеки:
sxg_rs– это библиотека Rust для создания SXG. Это самая многофункциональная библиотека SXG, которая используется в качестве основы для инструментовcloudflare_workerиfastly_compute.libsxg– это минимальная библиотека C для создания SXG. Она используется в качестве основы для SXG-модуля nginx и SXG-фильтра Envoy.go/signed-exchange– это минимальная библиотека Go, которая предоставляется спецификацией веб-пакета в качестве эталонной реализации для создания SXG. Она используется в качестве основы для инструмента CLIgen-signedexchangeи более функциональных инструментов Web Packager.
Согласование контента
Серверы должны показывать SXG, когда заголовок Accept указывает, что значение q для application/signed-exchange больше или равно значению q для text/html. На практике это означает, что сервер-источник будет передавать SXG поисковым роботам, но не браузерам. Многие из перечисленных выше инструментов делают это по умолчанию, но для других инструментов можно использовать следующее регулярное выражение, чтобы сопоставить заголовок Accept запросов, которые должны обслуживаться как SXG:
http
Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/
В этой рекомендации приведены примеры для Apache и nginx.
Update cache API
У кеша SXG Google есть API, с помощью которого владельцы сайтов могут удалять SXG-файлы из кеша до того, как истечет срок их действия, указанный в поле Cache-Control: max-age. Подробную информацию вы найдете в справочной документации по API обновления кеша.
Ссылки на SXG
Любой сайт может кешировать, показывать и предварительно загружать SXG-версии страниц, на которые он ссылается, если они доступны, с помощью тегов и :
html
<a href="https://example.com/article.html.sxg">
<link rel="prefetch" as="document" href="https://example.com/article.html.sxg">
В этой статье рассказывается, как использовать nginx для распространения SXG-версий.
Уникальные преимущества
SXG – одна из многих технологий, позволяющих выполнять перекрестную предзагрузку. При выборе технологии вам может потребоваться найти компромисс между оптимизацией различных аспектов. В следующих разделах описаны некоторые уникальные преимущества SXG по сравнению с другими решениями. Эти факторы могут со временем меняться по мере развития доступных решений.
Меньше запросов на показ
При межсайтовой предзагрузке вашему серверу может потребоваться обрабатывать дополнительные запросы. Это происходит, когда страница была предварительно загружена, но пользователь не посетил ее или предварительно загруженные байты не удалось показать пользователю. При использовании SXG количество таких неиспользуемых запросов можно значительно сократить:
- SXG-пакеты кешируются и могут отправляться пользователям до истечения срока их действия. Таким образом, многие запросы на предварительную выборку могут обрабатываться исключительно сервером кеша.
- SXG-файлы могут показываться пользователям как с файлами cookie на вашем сайте, так и без них. Таким образом, страница будет реже запрашиваться повторно после перехода.
Улучшение скорости загрузки страниц
Скорость загрузки страниц может увеличиться благодаря следующим возможностям:
- SXG-файлы могут показываться пользователям, у которых есть файлы cookie вашего сайта.
- Кроме того, SXG предварительно загружает дополнительные ресурсы для ваших страниц, такие как JavaScript, CSS, шрифты и изображения, если они указаны в заголовке
Link. - В ближайшем будущем предзагрузка SXG из Google Поиска станет доступна для большего количества типов результатов поиска.
Заключение
Обмен данными с подписью – это механизм доставки, который позволяет проверить источник и действительность ресурса независимо от того, как он был доставлен. В результате SXG могут распространяться третьими лицами с сохранением полной атрибуции издателя.