Un SXG est un mécanisme de diffusion qui permet d'authentifier l'origine d'une ressource indépendamment de la manière dont elle a été diffusée.
Les échanges signés (SXG) sont un mécanisme de diffusion qui permet d'authentifier l'origine d'une ressource indépendamment de la manière dont elle a été diffusée. L'implémentation de SXG peut améliorer le Largest Contentful Paint (LCP) en activant le préchargement inter-origines respectueux de la confidentialité. De plus, ce découplage favorise divers cas d'utilisation, tels que les expériences Internet hors connexion et la diffusion à partir de caches tiers.
Cet article fournit une présentation complète de SXG: son fonctionnement, ses cas d'utilisation et ses outils.
Compatibilité du navigateur
Les navigateurs basés sur Chromium (à partir des versions Chrome 73, Edge 79 et Opera 64) sont compatibles avec les SXG.
Présentation
Dans son cas d'utilisation principal, SXG utilise un cache pour précharger et diffuser du contenu signé de manière cryptographique par l'origine. Cela permet d'accélérer les navigations inter-origines à partir des sites référents, tout en veillant à ce que les pages restent inchangées et attribuées correctement à leur origine. Toutes les informations potentiellement identifiantes sont masquées jusqu'à ce que l'utilisateur accède à un site, ce qui protège sa confidentialité. La recherche Google est l'une des premières à adopter les fonctionnalités de préchargement SXG. Pour les sites qui reçoivent une grande partie de leur trafic de la recherche Google, SXG peut être un outil important pour accélérer le chargement des pages pour les utilisateurs. Nous espérons que cet impact s'étendra à d'autres sites référents au fil du temps.
Fonctionnement
Un site signe une paire requête/réponse (un "échange HTTP") de manière à permettre au navigateur de vérifier l'origine et l'intégrité du contenu indépendamment de la manière dont il a été distribué. Par conséquent, le navigateur peut afficher l'URL du site d'origine dans la barre d'adresse, plutôt que l'URL du serveur qui a diffusé le contenu.
Historiquement, le seul moyen pour un site d'utiliser un tiers pour distribuer son contenu tout en conservant l'attribution était de partager ses certificats SSL avec le distributeur. Cela présente des inconvénients en termes de sécurité. De plus, cela est loin de rendre le contenu vraiment portable.
Format SXG
Un SXG est encapsulé dans un fichier encodé en binaire qui comporte deux composants principaux: un échange HTTP et une signature qui couvre l'échange. L'échange HTTP se compose d'une URL de requête, d'informations de négociation de contenu et d'une réponse 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>
Le paramètre expires
de la signature indique la date d'expiration d'un SXG. Un SXG ne peut être valide que pendant sept jours maximum. Pour en savoir plus sur l'en-tête de signature, consultez la spécification des échanges HTTP signés.
Prise en charge de la personnalisation côté serveur
Un SXG contenant un en-tête Vary: Cookie
ne s'affichera que pour les utilisateurs qui ne disposent pas de cookies pour l'URL de la requête signée. Si votre site présente du code HTML différent à ses utilisateurs connectés, vous pouvez utiliser cette fonctionnalité pour profiter des SXG sans modifier cette expérience. Pour en savoir plus sur la personnalisation côté serveur avec SXG dynamique, consultez la page correspondante.
Emballage Web
Les échanges signés font partie de la famille de propositions de spécifications plus large sur le packaging Web. En plus des SXG, l'autre composant majeur de la spécification de packaging Web est les bundles Web ("échanges HTTP groupés"). Les bundles Web sont un ensemble de ressources HTTP et des métadonnées nécessaires pour interpréter le bundle.
La relation entre les SXG et les bundles Web est souvent source de confusion. SXG et les Web Bundles sont deux technologies distinctes qui ne dépendent pas l'une de l'autre. Les Web Bundles peuvent être utilisés avec des échanges signés et non signés. Les SXG et les bundles Web ont un objectif commun : créer un format de "conditionnement Web" qui permet de partager des sites dans leur intégralité pour une consommation hors connexion.
Accélérer le chargement des pages avec les échanges signés
L'activation des échanges signés peut contribuer à accélérer les performances des pages Web et donc à avoir un impact sur les métriques Core Web Vitals de votre site, en particulier sur la métrique LCP (Largest Contentful Paint). La recherche Google est l'une des premières à utiliser SXG pour offrir aux utilisateurs une expérience de chargement des pages plus rapide à partir de la page de résultats de recherche.
La recherche Google explore et met en cache les SXG lorsqu'ils sont disponibles, et précharge les SXG que l'utilisateur est susceptible de consulter (par exemple, la page correspondant au premier résultat de recherche).
Les SXG fonctionnent mieux en tandem avec d'autres optimisations des performances, telles que l'utilisation de CDN et la réduction des sous-ressources bloquant le rendu. Après l'implémentation, suivez ces recommandations pour maximiser les avantages du préchargement des SXG sur le LCP. Dans de nombreux cas, cette optimisation peut entraîner un chargement presque instantané des pages depuis la recherche Google:
Impact des échanges signés
D'après des tests précédents, nous avons constaté une réduction moyenne de 300 à 400 ms du LCP grâce aux préchargements compatibles avec SXG. Cela permet aux sites de faire une meilleure première impression auprès des utilisateurs et a souvent un impact positif sur les métriques commerciales.
Plusieurs marques et sites internationaux ont déjà bénéficié des échanges signés. Prenons l'exemple d'RebelMouse, un système de gestion de contenu (CMS) réputé, qui a vu ses performances et ses métriques commerciales s'améliorer grâce à l'implémentation des échanges signés:
- Narcity a amélioré son LCP de 41%.
- Paper Magazine a constaté une augmentation de 27% du nombre de sessions par utilisateur
- Le blog MLT a réduit le temps de chargement de la page de 21%
Cloudflare a constaté que les échanges signés amélioraient le TTFB pour 98% des sites testés et amélioraient le LCP pour 85% des sites, avec une amélioration médiane de plus de 20% pour les chargements de pages éligibles aux échanges signés.
Indexation
Les représentations SXG et non SXG d'une page ne sont pas classées ni indexées différemment par la recherche Google. Le format SXG est avant tout un mécanisme de diffusion. Il ne modifie pas le contenu sous-jacent.
AMP
Les contenus AMP peuvent être diffusés à l'aide de SXG. Les SXG permettent de précharger et d'afficher le contenu AMP à l'aide de son URL canonique, plutôt que de son URL AMP.AMP dispose de ses propres outils pour générer des SXG.Découvrez comment diffuser des pages AMP à l'aide d'échanges signés sur amp.dev.
Déboguer les SXG avec les outils pour les développeurs Chrome
Pour voir un SXG par vous-même, utilisez un navigateur Chromium, ouvrez DevTools, ouvrez le panneau "Réseau", puis accédez à cet exemple de page de recherche. Pour identifier les échanges signés, recherchez signed-exchange
dans la colonne Type.
L'onglet Preview (Aperçu) fournit plus d'informations sur le contenu d'un SXG.
Outils
L'implémentation d'échanges signés consiste à générer l'échange signé correspondant à une URL donnée, puis à le diffuser auprès des demandeurs (généralement des robots d'exploration).
Certificats
Pour générer un SXG, vous avez besoin d'un certificat pouvant signer des SXG, bien que certains outils les acquièrent automatiquement. Cette page liste les autorités de certification pouvant délivrer ce type de certificat. Vous pouvez obtenir des certificats automatiquement auprès de l'autorité de certification Google à l'aide de n'importe quel client ACME. Le serveur Web Packager inclut un client ACME, et sxg-rs le fera bientôt.
Outils SXG spécifiques à la plate-forme
Ces outils sont compatibles avec des piles technologiques spécifiques. Si vous utilisez déjà une plate-forme compatible avec l'un de ces outils, vous trouverez peut-être plus facile de la configurer qu'un outil à usage général.
sxg-rs/cloudflare_worker
s'exécute sur Cloudflare Workers.sxg-rs/fastly_compute
s'exécute sur Compute@Edge.Les échanges signés automatiques sont une fonctionnalité Cloudflare qui acquiert automatiquement des certificats et génère des échanges signés.
Le module SXG NGINX génère et diffuse des SXG pour les sites qui utilisent nginx. Pour obtenir les instructions de configuration, cliquez ici.
Le filtre SXG Envoy génère et diffuse des SXG pour les sites qui utilisent Envoy.
Outils SXG à usage général
Serveur HTTP sxg-rs
sxg-rs http_server agit en tant que proxy inverse pour la diffusion des SXG. Pour les requêtes des robots d'exploration SXG, http_server
signe les réponses du backend et répond avec un SXG. Pour obtenir des instructions d'installation, consultez le fichier README.
Serveur de packageur Web
Le serveur Web Packager, webpkgserver
, est une alternative à sxg-rs http_server, écrit en Go. Pour savoir comment configurer le serveur Web Packager, consultez Configurer des échanges signés avec Web Packager.
CLI Web Packager
La CLI Web Packager génère un SXG correspondant à une URL donnée.
webpackager \
--private\_key=private.key \
--cert\_url=https://example.com/certificate.cbor \
--url=https://example.com
Une fois le fichier SXG généré, importez-le sur votre serveur et servez-le avec le type MIME application/signed-exchange;v=b3
. En outre, vous devrez diffuser le certificat SXG en tant que application/cert-chain+cbor
.
Bibliothèques SXG
Vous pouvez utiliser ces bibliothèques pour créer votre propre générateur SXG:
sxg_rs
est une bibliothèque Rust permettant de générer des fichiers SXG. Il s'agit de la bibliothèque SXG la plus complète. Elle sert de base aux outilscloudflare_worker
etfastly_compute
.libsxg
est une bibliothèque C minimale permettant de générer des fichiers SXG. Il sert de base au module SXG NGINX et au filtre SXG Envoy.go/signed-exchange
est une bibliothèque Go minimale fournie par la spécification de webpackage en tant qu'implémentation de référence de la génération de fichiers SXG. Il sert de base à son outil de référence de la CLI,gen-signedexchange
, et aux outils de packager Web plus complets.
Négociation de contenu
Les serveurs doivent diffuser des SXG lorsque l'en-tête "Accept" indique que la valeur q pour application/signed-exchange est supérieure ou égale à la valeur q pour text/html. En pratique, cela signifie qu'un serveur d'origine diffuse des SXG aux robots d'exploration, mais pas aux navigateurs. De nombreux outils ci-dessus le font par défaut, mais pour d'autres outils, l'expression régulière suivante peut être utilisée pour faire correspondre l'en-tête "Accept" des requêtes qui doivent être diffusées en tant que SXG :
http
Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/
Cette recommandation inclut des exemples pour Apache et nginx.
Mettre à jour l'API de cache
Le cache Google SXG dispose d'une API que les propriétaires de sites peuvent utiliser pour supprimer les SXG du cache avant qu'ils n'expirent en raison de Cache-Control: max-age
. Pour en savoir plus, consultez la documentation de référence de l'API update-cache.
Associer à SXG
Tout site peut mettre en cache, diffuser et précharger les SXG des pages auxquelles il renvoie, le cas échéant, à l'aide des balises et :
html
<a href="https://example.com/article.html.sxg">
<link rel="prefetch" as="document" href="https://example.com/article.html.sxg">
cet article explique comment utiliser nginx pour distribuer des SXG.
Avantages uniques
SXG est l'une des nombreuses technologies permettant d'activer le préchargement inter-origines. Lorsque vous choisissez la technologie à utiliser, vous devrez peut-être faire des compromis entre l'optimisation de différents aspects. Les sections suivantes illustrent quelques-unes des valeurs uniques que SXG offre dans l'espace des solutions possibles. Ces facteurs peuvent évoluer au fil du temps à mesure que l'espace des solutions disponibles évolue.
Moins de requêtes à diffuser
Avec le préchargement intersites, votre serveur peut être amené à traiter des requêtes supplémentaires. Cela correspond aux cas où une page a été préchargée, mais que l'utilisateur ne l'a pas consultée ou que les octets préchargés n'ont pas pu être affichés. Pour les échanges signés, ces requêtes supplémentaires inutilisées peuvent être considérablement réduites:
- Les SXG sont mis en cache et peuvent être envoyés aux utilisateurs jusqu'à leur expiration. Ainsi, de nombreux préchargements peuvent être gérés uniquement par le serveur de cache.
- Les SXG peuvent être diffusées auprès des utilisateurs avec ou sans cookies sur votre site. Par conséquent, la page doit être récupérée moins souvent après la navigation.
Amélioration de la vitesse des pages
Vous pouvez constater une amélioration supplémentaire de la vitesse des pages grâce aux surfaces et fonctionnalités de préchargement actuellement compatibles:
- Les SXG peuvent être diffusées auprès des utilisateurs disposant de cookies pour votre site.
- SXG précharge également des sous-ressources pour vos pages, telles que JavaScript, CSS, les polices et les images, lorsqu'elles sont spécifiées à l'aide d'un en-tête
Link
. - Dans un avenir proche, le préchargement SXG de la recherche Google sera disponible pour d'autres types de résultats de recherche.
Conclusion
Les échanges signés sont un mécanisme de diffusion qui permet de vérifier l'origine et la validité d'une ressource indépendamment de la manière dont elle a été diffusée. Par conséquent, les SXG peuvent être distribués par des tiers tout en conservant une attribution complète à l'éditeur.