Un SXG es un mecanismo de entrega que permite autenticar el origen de un recurso independientemente de cómo se entregó.
Los intercambios firmados (SXG) son un mecanismo de publicación que permite autenticar el origen de un recurso, independientemente de cómo se haya publicado. La implementación de SXG puede mejorar el Largest Contentful Paint (LCP) habilitando la carga previa de origen cruzado que preserva la privacidad. Además, esta desvinculación promueve una variedad de casos de uso, como las experiencias de Internet sin conexión y la entrega desde cachés de terceros.
En este artículo, se proporciona una descripción general completa de los SXG: cómo funcionan, casos de uso y herramientas.
Compatibilidad del navegador
Los navegadores basados en Chromium admiten SXG (a partir de las versiones Chrome 73, Edge 79 y Opera 64).
Descripción general
Como caso de uso principal, los SXG usan una caché para realizar la carga previa y publicar contenido que el origen firmó de forma criptográfica. Esto ayuda a acelerar las navegaciones de origen cruzado desde los sitios de referencia y, al mismo tiempo, garantiza que las páginas permanezcan sin alteraciones y se atribuyan correctamente a su origen. Cualquier información de identificación potencial se oculta hasta que el usuario navega a un sitio, lo que protege su privacidad. La Búsqueda de Google es un usuario pionero de las funciones de carga previa de SXG y, para los sitios que reciben una gran parte de su tráfico de la Búsqueda de Google, SXG puede ser una herramienta importante para ofrecer cargas de página más rápidas a los usuarios. Con el tiempo, esperamos que este impacto se extienda a más referentes.
Cómo funciona
Un sitio firma un par de solicitud y respuesta (un "intercambio HTTP") de una manera que permite que el navegador verifique el origen y la integridad del contenido, independientemente de cómo se distribuyó. Como resultado, el navegador puede mostrar la URL del sitio de origen en la barra de direcciones, en lugar de la URL del servidor que entregó el contenido.

Históricamente, la única forma de que un sitio use un tercero para distribuir su contenido y mantener la atribución ha sido que el sitio comparta sus certificados SSL con el distribuidor. Esto tiene desventajas de seguridad; además, está lejos de hacer que el contenido sea verdaderamente portátil.
El formato SXG
Un SXG se encapsula en un archivo codificado en formato binario que tiene dos componentes principales: un intercambio HTTP y una firma que cubre el intercambio. El intercambio HTTP consta de una URL de solicitud, información de negociación de contenido y una respuesta 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>El parámetro expires de la firma indica la fecha de vencimiento de un SXG. Un SXG puede ser válido durante un máximo de 7 días. Obtén más información sobre el encabezado de firma en la especificación de intercambios HTTP firmados.
Compatibilidad con la personalización del servidor
Un SXG que contenga un encabezado Vary: Cookie solo se mostrará a los usuarios que no
tengan cookies para la URL de la solicitud firmada. Si tu sitio presenta un HTML diferente
a los usuarios que accedieron, puedes usar esta función para aprovechar los SXG
sin alterar esa experiencia. Consulta los detalles sobre la personalización del servidor con SXG dinámico.
Empaquetado web
Los SXG forman parte de la familia de propuestas de especificaciones más amplia de empaquetado web. Además de los SXG, el otro componente principal de la especificación de Web Packaging son los Web Bundles ("intercambios HTTP agrupados"). Los paquetes web son una colección de recursos HTTP y los metadatos necesarios para interpretar el paquete.
La relación entre los SXG y los paquetes web es un punto de confusión común. Los SXG y los paquetes web son dos tecnologías distintas que no dependen una de la otra: los paquetes web se pueden usar con intercambios firmados y no firmados. Un objetivo común que promueven tanto los SXG como los paquetes web es la creación de un formato de "empaquetado web" que permita compartir los sitios en su totalidad para su consumo sin conexión.
Acelera la carga de páginas con intercambios firmados
Habilitar los intercambios firmados puede ayudar a acelerar el rendimiento de las páginas web y, de esa manera, mejorar las Core Web Vitals de tu sitio, en particular, el Largest Contentful Paint (LCP). Como usuario pionero, la Búsqueda de Google usa SXG para brindar a los usuarios una experiencia de carga de página más rápida para las páginas que se cargan desde la página de resultados de búsqueda.
La Búsqueda de Google rastrea y almacena en caché los SXG cuando están disponibles, y carga previamente los SXG que es probable que el usuario visite, por ejemplo, la página correspondiente al primer resultado de la búsqueda.
Los SXG funcionan mejor junto con otras optimizaciones de rendimiento, como el uso de CDN y la reducción de subrecursos que bloquean la renderización. Después de la implementación, sigue estas recomendaciones para maximizar el beneficio de LCP de la carga previa de SXG. En muchos casos, esta optimización puede generar cargas de página casi instantáneas desde la Búsqueda de Google:
Impacto de los intercambios firmados
En experimentos anteriores, observamos una reducción promedio de 300 ms a 400 ms en el LCP de las precargas habilitadas para SXG. Esto ayuda a los sitios a causar una mejor primera impresión en los usuarios y, a menudo, tiene un impacto positivo en las métricas de la empresa.
Varias marcas y sitios globales ya se beneficiaron de los intercambios firmados. Como caso de éxito, veamos cómo la implementación de intercambios firmados ayudó a RebelMouse, un sistema de administración de contenido (CMS) destacado, a mejorar el rendimiento y las métricas comerciales de sus clientes:
- Narcity mejoró el LCP en un 41%
- Paper Magazine observó un aumento del 27% en las sesiones por usuario.
- MLT Blog disminuyó el tiempo de carga de la página en un 21%
Cloudflare descubrió que los SXG mejoraron el TTFB en el 98% de los sitios que probó y mejoraron el LCP en el 85% de los sitios, con una mejora promedio de más del 20% en las cargas de páginas aptas para SXG.
Indexación
La Búsqueda de Google no clasifica ni indexa de manera diferente las representaciones de SXG y las que no son de SXG de una página. En última instancia, SXG es un mecanismo de entrega, por lo que no cambia el contenido subyacente.
AMP
El contenido AMP se puede publicar con SXG. Los SXG permiten que el contenido AMP se cargue previamente y se muestre con su URL canónica, en lugar de su URL de AMP.AMP tiene sus propias herramientas para generar SXG.Obtén información para publicar AMP con intercambios firmados en amp.dev.
Depura SXG con las Herramientas para desarrolladores de Chrome
Para ver un SXG de primera mano, usa un navegador Chromium, abre las Herramientas para desarrolladores, abre el panel de redes y visita esta página de búsqueda de ejemplo. Los intercambios firmados se pueden identificar buscando signed-exchange en la columna Tipo.
La pestaña Vista previa proporciona más información sobre el contenido de un SXG.
Herramientas
La implementación de los SXG consiste en generar el SXG correspondiente a una URL determinada y, luego, entregarlo a los solicitantes (por lo general, rastreadores).
Certificados
Para generar un SXG, necesitarás un certificado que pueda firmar SXG, aunque algunas herramientas los adquieren automáticamente. En esta página, se enumeran las autoridades certificadoras que pueden emitir este tipo de certificado. Los certificados se pueden obtener automáticamente de la autoridad certificadora de Google con cualquier cliente de ACME. Web Packager Server tiene un cliente ACME integrado, y sxg-rs lo tendrá pronto.
Herramientas de SXG específicas de la plataforma
Estas herramientas admiten pilas tecnológicas específicas. Si ya usas una plataforma compatible con una de estas herramientas, es posible que te resulte más fácil de configurar que una herramienta de uso general.
sxg-rs/cloudflare_workerse ejecuta en Cloudflare Workers.sxg-rs/fastly_computese ejecuta en Fastly Compute@Edge.Los intercambios firmados automáticos son una función de Cloudflare que adquiere certificados y genera intercambios firmados de forma automática.
El módulo NGINX SXG genera y entrega SXG para sitios que usan nginx. Puedes encontrar las instrucciones de configuración aquí.
Envoy SXG Filter genera y publica SXG para sitios que usan Envoy.
Herramientas de SXG de uso general
Servidor HTTP sxg-rs
El http_server de sxg-rs actúa como un proxy inverso para entregar SXG. En el caso de las solicitudes de los rastreadores de SXG, http_server firmará las
respuestas del backend y responderá con un SXG. Para obtener instrucciones de instalación, consulta el archivo README.
Servidor de Web Packager
El servidor de Web Packager, webpkgserver, es una alternativa a http_server de sxg-rs, escrito en Go. Para obtener instrucciones sobre cómo configurar el servidor de Web Packager, consulta Cómo configurar intercambios firmados con Web Packager.
CLI de Web Packager
La CLI de Web Packager genera un SXG que corresponde a una URL determinada.
webpackager \
--private\_key=private.key \
--cert\_url=https://example.com/certificate.cbor \
--url=https://example.com
Una vez que se haya generado el archivo SXG, súbelo a tu servidor y publícalo con el tipo de MIME application/signed-exchange;v=b3. Además, deberás publicar el certificado de SXG como application/cert-chain+cbor.
Bibliotecas de SXG
Estas bibliotecas se pueden usar para compilar tu propio generador de SXG:
sxg_rses una biblioteca de Rust para generar SXG. Es la biblioteca de SXG con más funciones y se usa como base para las herramientascloudflare_workeryfastly_compute.libsxges una biblioteca de C mínima para generar SXG. Se usa como base para el módulo NGINX SXG y el filtro Envoy SXG.go/signed-exchangees una biblioteca mínima de Go que proporciona la especificación del paquete web como una implementación de referencia para generar SXG. Se usa como base para su herramienta de CLI de referencia,gen-signedexchange, y las herramientas de Web Packager con más funciones.
Negociación de contenido
Los servidores deben entregar SXG cuando el encabezado Accept indique que el valor q para application/signed-exchange es mayor o igual que el valor q para text/html. En la práctica, esto significa que un servidor de origen entregará SXG a los rastreadores, pero no a los navegadores. Muchas de las herramientas anteriores lo hacen de forma predeterminada, pero para otras herramientas, se puede usar la siguiente expresión regular para que coincida con el encabezado Accept de las solicitudes que se deben entregar como SXG:
http
Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/
Esta recomendación incluye ejemplos para Apache y nginx.
API de Update cache
La caché de SXG de Google tiene una API que los propietarios de sitios pueden usar para quitar los SXG de la caché antes de que venzan debido a Cache-Control: max-age. Consulta la referencia de la API de actualización de caché para obtener más detalles.
Vinculación a SXG
Cualquier sitio puede almacenar en caché, publicar y realizar la carga previa de los SXG de las páginas a las que se vincula, cuando estén disponibles, con las etiquetas y :
html
<a href="https://example.com/article.html.sxg">
<link rel="prefetch" as="document" href="https://example.com/article.html.sxg">
Este artículo ilustra cómo usar nginx para distribuir SXG.
Ventajas únicas
SXG es una de las muchas tecnologías posibles para habilitar la carga previa de origen cruzado. Cuando decidas qué tecnología usar, es posible que debas sopesar la optimización de diferentes aspectos. En las siguientes secciones, se ilustran algunos de los valores únicos que proporcionan los SXG en el espacio de posibles soluciones. Estos factores pueden cambiar con el tiempo a medida que evoluciona el espacio de soluciones disponibles.
Menos solicitudes para entregar
Con la carga previa entre sitios, es posible que tu servidor deba entregar solicitudes adicionales. Esto corresponde a los casos en los que se realizó la carga previa de una página, pero el usuario no la visitó o no se le pudieron mostrar los bytes cargados previamente. En el caso de los SXG, estas solicitudes adicionales sin usar se pueden reducir de forma significativa:
- Los SXG se almacenan en caché y se pueden enviar a los usuarios hasta que venzan. Por lo tanto, el servidor de caché puede controlar muchas recuperaciones previas por sí solo.
- Los SXG se pueden mostrar a los usuarios con y sin cookies en tu sitio. Por lo tanto, habrá menos ocasiones en las que se deba volver a recuperar la página después de la navegación.
Mejora de la velocidad de la página
Es posible que notes una mejora adicional en la velocidad de la página debido a las plataformas y capacidades de carga previa que admite actualmente:
- Los SXG se pueden mostrar a los usuarios con cookies para tu sitio.
- Los SXG también recuperan previamente los recursos secundarios de tus páginas, como JavaScript, CSS, fuentes e imágenes, cuando se especifican con un encabezado
Link. - En un futuro cercano, la carga previa de SXG desde la Búsqueda de Google estará disponible en más tipos de resultados de la búsqueda.
Conclusión
Los intercambios firmados son un mecanismo de entrega que permite verificar el origen y la validez de un recurso, independientemente de cómo se haya entregado. Como resultado, los SXG se pueden distribuir por terceros mientras se mantiene la atribución completa del publicador.