Saltar al contenido principal




Cómo obtener y entregar archivos SXG y los desafíos de la captación previa de recursos secundarios.

Como un Intercambios HTTP firmados (SXG) distribuidor, puede entregar archivos SXG en nombre de los creadores de contenido original. Los navegadores web que admiten SXG mostrarán dichos archivos SXG como si fueran entregados por los creadores de contenido original. Esto le permite implementar la precarga entre sitios sin violar la privacidad. Esta guía le muestra cómo distribuir SXG correctamente.

Compatibilidad con varios navegadores

Actualmente, Chrome es el único navegador que admite SXG. Consulte la sección Consenso y estandarización de Intercambios HTTP firmados por el origen para obtener información más actualizada.

Obtener archivos SXG

Especifique en su Accept encabezado de solicitud que desea que el servidor devuelva un archivo SXG junto con la solicitud:

Accept: application/signed-exchange;v=b3,*/*;q=0.8

Esta guía asume que coloca sus archivos SXG en /var/www/sxg.

Sirve un archivo SXG simple

Adjunte los siguientes encabezados para distribuir un solo archivo SXG:

Content-Type: application/signed-exchange;v=v3
X-Content-Type-Options: nosniff

Configurar nginx:

http {
...
types {
application/signed-exchange;v=b3 sxg;
}
add_header X-Content-Type-Options nosniff;

location / {
more_set_headers "Content-Type: application/signed-exchange;v=b3";
alias /var/www/sxg/;
try_files $uri.sxg $uri =404;
autoindex off;
}
...

Cargue la nueva configuración en nginx:

sudo systemctl restart nginx.service

nginx comenzará a servir archivos SXG. Cuando Chrome acceda a su servidor, la dirección del editor de contenido original aparecerá en la barra.

Captación previa de recursos secundarios

La mayoría de las páginas web constan de múltiples subrecursos, como CSS, JavaScript, fuentes e imágenes. El contenido de SXG no se puede cambiar sin la clave privada del creador del contenido. Esto causa problemas cuando el navegador intenta resolver subrecursos.

Por ejemplo, suponga index.html.sxg de https://website.test/index.html tiene un enlace a https://website.test/app.js. Cuando el navegador de un usuario recibe el archivo SXG de https://distributor.test/example.com/index.html.sxg, encontrará el enlace a https://website.test/app.js. El navegador puede recuperar https://website.test/app.js directamente en el acceso real, pero no debe hacerse en la fase de precarga para preservar la privacidad. Si el recurso se obtuvo durante la fase de precarga, sería posible para el creador de contenido (website.test) para poder detectar qué distribuidor de contenido (distributor.test) está solicitando el recurso.

linking-7369888

Si el distribuidor quiere servir app.js.sxg de su propio servicio e intenta modificar https://website.test/app.js para ser la versión del distribuidor de ese subrecurso (como https://distributor.test/website.test/app.js.sxg), provocará una discrepancia de firma y hará que el SXG no sea válido.

rewritten-5894715

Para resolver este problema, ahora hay una función experimental de recuperación previa de recursos secundarios SXG en Chrome. Puede habilitarlo en: chrome://flags/#enable-sxg-subresource-prefetching. Para utilizar la captación previa de recursos secundarios, se deben cumplir las siguientes condiciones:

  • El editor debe incrustar una entrada de encabezado de respuesta en SXG, como: link: <https://website.test/app.js>;rel="preload";as="script",<https://website.test/app.js>;rel="allowed-alt-sxg";header-integrity="sha256-h6GuCtTXe2nITIHHpJM+xCxcKrYDpOFcIXjihE4asxk=". Esto especifica el subrecurso que puede ser sustituido por el hash de integridad específico del SXG.
  • El distribuidor debe adjuntar un encabezado de respuesta al atender el SXG, como por ejemplo: link: <https://distributor.test/website.test/app.js.sxg>;rel="alternate";type="application/signed-exchange;v=b3";anchor="https://website.test/app.js". Esto especifica la ruta de app.js y corresponde al subrecurso.

anchor-9859234

El primero es relativamente fácil porque nginx-sxg-module puede calcular hashes de integridad e incrustarlos en encabezados de enlace de respuestas ascendentes. Pero el segundo es más difícil porque el distribuidor de contenido debe conocer los subrecursos especificados en el SXG.

Si no hay otros recursos adicionales que https://website.test/app.js, entonces todo lo que necesita agregar en su configuración de nginx es:

add_header link <https://distributor.test/website.test/app.js.sxg>;rel="alter...

Pero estos casos son raros porque los sitios web típicos constan de una gran cantidad de recursos secundarios. Además, el distribuidor debe adjuntar el encabezado del enlace de anclaje adecuado al entregar un archivo SXG. Actualmente, no existe una manera fácil de resolver este problema, ¡así que permanezca atento a las actualizaciones!

Enviar comentarios

Los ingenieros de Chromium están ansiosos por escuchar sus comentarios sobre la distribución de SXG en [email protected]. También puedes unirte la discusión de especificacioneso Reportar un error al equipo. Sus comentarios serán de gran ayuda en el proceso de estandarización y también ayudarán a abordar los problemas de implementación. ¡Gracias!