Intercambios firmados (SXG)

Un SXG es un mecanismo de entrega que permite autenticar el origen de un recurso independientemente de cómo se haya entregado.

Katie Hempenius
Katie Hempenius
Devin Mullins
Devin Mullins

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 procesamiento de imagen con contenido más grande (LCP) habilitando la carga previa de origen cruzado que preserva la privacidad. Además, esta desvinculación avanza en una variedad de casos de uso, como las experiencias de Internet sin conexión y la publicación desde cachés de terceros.

En este artículo, se proporciona una descripción general integral de los SXG: cómo funcionan, los casos de uso y las 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, SXG usa una caché para la carga previa y la publicación de contenido que el origen firmó de forma criptográfica. Esto ayuda a acelerar las navegaciones entre orígenes desde los sitios de referencia y, al mismo tiempo, garantiza que las páginas no se modifiquen y se atribuyan correctamente a su origen. Toda la información potencialmente identificativa se oculta hasta que el usuario navega a un sitio, lo que protege su privacidad. La Búsqueda de Google es uno de los primeros usuarios en adoptar las capacidades de precarga 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áginas más rápidas a los usuarios. Con el tiempo, esperamos que este impacto se expanda a otros referers.

Cómo funciona

Un sitio firma un par de solicitud/respuesta (un "intercambio HTTP") de una manera que le permite al navegador verificar el origen y la integridad del contenido independientemente de cómo se haya distribuido. 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.

Diagrama que explica cómo funcionan los intercambios firmados. Navegador que se comunica con la caché, que se comunica con el sitio de destino

Históricamente, la única forma de que un sitio use un tercero para distribuir su contenido y, al mismo tiempo, mantener la atribución era que el sitio compartiera sus certificados SSL con el distribuidor. Esto tiene inconvenientes de seguridad. Además, está muy lejos de hacer que el contenido sea realmente 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 abarca el intercambio. El intercambio HTTP consta de una URL de solicitud, información de negociación de contenido y una respuesta HTTP.

Este es un ejemplo de un archivo SXG decodificado.

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=&quot;https://test.web.app/ViFgi0WfQ-NotPJf8PBo2T5dEuZ13NdZefPybXq_HhE&quot;;
    date=1597680503;expires=1598285303;integrity=&quot;digest/mi-sha256-03&quot;;sig=<em>MEUCIQD5VqojZ1ujXXQaBt1CPKgJxuJTvFlIGLgkyNkC6d7LdAIgQUQ8lC4eaoxBjcVNKLrbS9kRMoCHKG67MweqNXy6wJg=</em>;
    validity-url=&quot;https://example.org/webpkg/validity&quot;
header integrity: sha256-Gl9bFHnNvHppKsv+bFEZwlYbbJ4vyf4MnaMMvTitTGQ=</p>

<p>The exchange has a valid signature.
payload [1256 bytes]:</p>
<pre class="prettyprint"><code>&lt;title&gt;SXG example&lt;/title&gt;
&lt;meta charset=&#34;utf-8&#34;&gt;
&lt;meta http-equiv=&#34;Content-type&#34; content=&#34;text/html; charset=utf-8&#34;&gt;
&lt;style type=&#34;text/css&#34;&gt;
body {
    background-color: #f0f0f2;
    margin: 0;
    padding: 0;
}
&lt;/style&gt;
</code></pre>
<div>
    <h1>Hello</h1>
</div>

<p>

El parámetro expires en 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 solicitud firmada. Si tu sitio presenta HTML diferente a los usuarios que accedieron, puedes usar esta función para aprovechar las SXG sin alterar esa experiencia. Consulta los detalles sobre la personalización del servidor con SXG dinámico.

Empaquetado web

SXG forma parte de la familia más amplia de propuestas de especificaciones de empaquetado web. Además de los SXG, el otro componente principal de la especificación de empaquetado web son los paquetes web ("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. 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 sin firmar. Un objetivo común que promueven los SXG y los paquetes web es la creación de un formato de "empaquetado web" que permita compartir los sitios por completo para el consumo sin conexión.

Cómo acelerar las cargas de páginas con intercambios firmados

Habilitar los intercambios firmados puede ayudar a acelerar el rendimiento de las páginas web y, por lo tanto, afectar las Métricas web esenciales de tu sitio, en particular, el Procesamiento de imagen con contenido más grande (LCP). Como usuario pionero, la Búsqueda de Google usa SXG para proporcionar a los usuarios una experiencia de carga de páginas más rápida para las páginas cargadas desde la página de resultados de la búsqueda.

La Búsqueda de Google rastrea y almacena en caché los SXG cuando están disponibles y precarga 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 en conjunto con otras optimizaciones de rendimiento, como el uso de CDN y la reducción de los subrecursos que bloquean la renderización. Después de la implementación, sigue estas recomendaciones para maximizar el beneficio de la LCP de la precarga de SXG. En muchos casos, esta optimización puede generar cargas de páginas casi instantáneas provenientes de la Búsqueda de Google:

Impacto de los intercambios firmados

En experimentos anteriores, observamos una reducción promedio de entre 300 ms y 400 ms en el LCP a partir de la precarga habilitada 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 comerciales.

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ó la LCP en un 41%
  • Paper Magazine registró un aumento del 27% en las sesiones por usuario.
  • El blog de MLT redujo el tiempo de carga de la página en un 21%.

Cloudflare descubrió que las 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 SXG y no SXG de una página. En última instancia, SXG es un mecanismo de publicación, no cambia el contenido subyacente.

AMP

El contenido de AMP se puede publicar con SXG. Los SXG permiten que el contenido de AMP se precargue y se muestre con su URL canónica, en lugar de su URL de AMP.AMP tiene sus propias herramientas independientes para generar SXG.Obtén información para publicar AMP con intercambios firmados en amp.dev.

Cómo depurar SXG con las Herramientas para desarrolladores de Chrome

Para ver un SXG de primera mano, usa un navegador Chromium, abre DevTools, abre el panel Network y visita esta página de búsqueda de ejemplo. Para identificar los intercambios firmados, busca signed-exchange en la columna Tipo.

Captura de pantalla que muestra una solicitud de SXG en el panel &quot;Red&quot; de DevTools
El panel Red en DevTools

La pestaña Vista previa proporciona más información sobre el contenido de un SXG.

Captura de pantalla de la pestaña &quot;Vista previa&quot; de un SXG
La pestaña Vista previa en DevTools

Herramientas

La implementación de SXG consiste en generar el SXG correspondiente a una URL determinada y, luego, publicarlo 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 de tecnología específicas. Si ya usas una plataforma compatible con una de estas herramientas, es posible que te resulte más fácil configurarla que una herramienta de uso general.

Herramientas de SXG de uso general

Servidor HTTP de sxg-rs

sxg-rs http_server actúa como un proxy inverso para entregar SXG. En el caso de las solicitudes de 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 empaquetador web

El servidor de Web Packager, webpkgserver, es una alternativa a sxg-rs http_server, 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 correspondiente 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 SXG como application/cert-chain+cbor.

Bibliotecas de SXG

Estas bibliotecas se pueden usar para compilar tu propio generador de SXG:

  • sxg_rs es una biblioteca de Rust para generar SXG. Es la biblioteca SXG con más funciones y se usa como base para las herramientas cloudflare_worker y fastly_compute.

  • libsxg es una biblioteca C mínima para generar SXG. Se usa como base para el módulo NGINX SXG y el filtro SXG de Envoy.

  • go/signed-exchange es una biblioteca mínima de Go proporcionada por la especificación de webpackage 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 indica que el valor de q para application/signed-exchange es mayor o igual que el valor de q para text/html. En la práctica, esto significa que un servidor de origen publicará SXG para los rastreadores, pero no para 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 la caché para obtener más detalles.

Vinculación a SXG

Cualquier sitio puede almacenar en caché, publicar y precargar SXG de las páginas a las que 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"> En este artículo, se muestra cómo usar nginx para distribuir SXG.

Ventajas únicas

SXG es una de las muchas tecnologías posibles para habilitar la carga previa entre orígenes. Cuando decidas qué tecnología usar, es posible que debas optimizar diferentes aspectos. En las siguientes secciones, se ilustran algunos de los valores únicos que proporciona SXG en el espacio de soluciones posibles. Estos factores pueden cambiar con el tiempo a medida que evoluciona el espacio de soluciones disponibles.

Menos solicitudes para publicar

Con la precarga entre sitios, es posible que tu servidor deba entregar solicitudes adicionales. Esto corresponde a los casos en los que se precargó una página, pero el usuario no la visitó o no se pudieron mostrar los bytes precargados. En el caso de SXG, estas solicitudes adicionales sin usar se pueden reducir significativamente:

  • 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 precargas.
  • Los SXG se pueden mostrar a los usuarios con o 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 observes una mejora adicional en la velocidad de la página debido a las plataformas y capacidades de precarga que admite actualmente:

  • Los SXG se pueden mostrar a los usuarios que tengan cookies para tu sitio.
  • SXG también precarga subrecursos para 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 de 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 publicación que permite verificar el origen y la validez de un recurso independientemente de cómo se haya publicado. Como resultado, los SXG se pueden distribuir a través de terceros y, al mismo tiempo, mantener la atribución completa del publicador.

Lecturas adicionales