Signed Exchange (SXG)

Un SXG è un meccanismo di consegna che consente di autenticare l'origine di una risorsa, indipendentemente da come è stata consegnata.

Katie Hempenius
Katie Hempenius
Devin Mullins
Devin Mullins

Signed Exchange (SXG) è un meccanismo di consegna che consente di autenticare l'origine di una risorsa, indipendentemente da come è stata erogata. L'implementazione di SXG può migliorare Largest Contentful Paint (LCP) attivando il precaricamento multiorigine incentrato sulla tutela della privacy. Inoltre, questo disaccoppiamento fa avanzare una serie di casi d'uso, come le esperienze internet offline e la pubblicazione da cache di terze parti.

Questo articolo fornisce una panoramica completa di SXG: come funziona, casi d'uso e strumenti.

Compatibilità del browser

SXG è supportato dai browser basati su Chromium (a partire dalle versioni: Chrome 73, Edge 79 e Opera 64).

Panoramica

Come caso d'uso principale, SXG utilizza una cache per precaricare e pubblicare contenuti firmati tramite crittografia dall'origine. Questo consente di velocizzare le navigazioni tra origini dai siti referer, garantendo al contempo che le pagine rimangano inalterate e siano correttamente attribuite alla loro origine. Tutte le informazioni potenzialmente identificative vengono nascoste fino a quando l'utente visita un sito, proteggendo così la sua privacy. La Ricerca Google è tra i primi utenti ad adottare le funzionalità di precaricamento di SXG e, per i siti che ricevono una gran parte del loro traffico dalla Ricerca Google, SXG può essere uno strumento importante per caricare più rapidamente le pagine agli utenti. Con il tempo, ci auguriamo che questo impatto si estenderà ad altri referrer.

Come funziona

Un sito firma una coppia di richiesta/risposta (uno "scambio HTTP") in modo che il browser possa verificare l'origine e l'integrità dei contenuti indipendentemente dalla modalità di distribuzione dei contenuti. Di conseguenza, il browser può visualizzare nella barra degli indirizzi l'URL del sito di origine anziché l'URL del server che ha pubblicato i contenuti.

Diagramma che spiega il funzionamento di Signed Exchange. Browser che comunica con la cache che comunica con il sito di destinazione

In passato, l'unico modo in cui un sito può utilizzare una terza parte per distribuire i propri contenuti mantenendo l'attribuzione è stato condividere i certificati SSL con il distributore. Questo presenta alcuni svantaggi in termini di sicurezza; inoltre, è molto lontano dal rendering i contenuti davvero portabili.

Il formato SXG

Un SXG viene incapsulato in un file con codifica binaria che ha due componenti principali: uno scambio HTTP e una firma che copre lo scambio. Lo scambio HTTP è costituito da un URL di richiesta, informazioni sulla negoziazione di contenuti e una risposta HTTP.

Ecco un esempio di file SXG decodificato.

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>

Il parametro expires nella firma indica la data di scadenza di un SXG. Un SXG può essere valido per un massimo di 7 giorni. Puoi trovare ulteriori informazioni sull'intestazione della firma nella specifica di Signed HTTP Exchanges.

Supporto per la personalizzazione lato server

Un file SXG contenente un'intestazione Vary: Cookie verrà mostrato solo agli utenti che non dispongono di cookie per l'URL della richiesta firmata. Se il tuo sito presenta codice HTML diverso agli utenti che hanno eseguito l'accesso, puoi utilizzare questa funzionalità per usufruire degli SXG senza alterare l'esperienza utente. Visualizza i dettagli sulla personalizzazione lato server con SXG dinamico.

Web Packaging

SXG fa parte della più ampia famiglia di proposte di specifiche Web Packaging. Oltre agli SXG, l'altro componente importante della specifica Web Packaging è Web Bundle ("scambi HTTP in bundle"). I Web Bundle sono una raccolta di risorse HTTP e dei metadati necessari per interpretare il bundle.

La relazione tra SXG e Web Bundle è un punto di confusione comune. SXG e Web Bundle sono due tecnologie distinte che non dipendono l'una dall'altra: i Web Bundle possono essere utilizzati sia con piattaforme di scambio firmate che non firmate. Un obiettivo comune avanzato sia dagli SXG che dai Web Bundle è la creazione di un formato di "imballaggio web" che consenta ai siti di essere condivisi nella loro interezza per il consumo offline.

Accelerare il caricamento delle pagine con Signed Exchange

L'attivazione di Signed Exchange può contribuire a velocizzare le prestazioni delle pagine web e, di conseguenza, a influire sui Core Web Vitals del tuo sito, in particolare la funzionalità Largest Contentful Paint (LCP). In qualità di early adopter, la Ricerca Google utilizza SXG per offrire agli utenti un'esperienza di caricamento più veloce per le pagine caricate dalla pagina dei risultati di ricerca.

La Ricerca Google esegue la scansione e memorizza nella cache gli SXG quando disponibili e precarica gli SXG che è probabile che l'utente visiti, ad esempio la pagina corrispondente al primo risultato di ricerca.

SXG funziona al meglio insieme ad altre ottimizzazioni delle prestazioni, come l'uso di CDN e la riduzione delle sottorisorse che bloccano il rendering. Dopo l'implementazione, segui questi consigli per massimizzare il vantaggio dell'LCP dal precaricamento degli SXG. In molti casi, questa ottimizzazione può comportare caricamenti di pagine quasi istantanei provenienti dalla Ricerca Google:

Impatto degli scambi firmati

Dagli esperimenti precedenti abbiamo osservato una riduzione media da 300 ms a 400 ms dell'LCP dai precaricamenti abilitati per SXG. Ciò consente ai siti di fare una prima impressione migliore sugli utenti e spesso ha un impatto positivo sulle metriche dell'attività.

Diversi brand e siti globali hanno già beneficiato di Signed Exchange. Come case study, vediamo in che modo l'implementazione di Signed Exchange ha aiutato RebelMouse, un importante sistema di gestione dei contenuti (CMS), a migliorare le prestazioni e le metriche aziendali dei clienti:

  • Narcity ha migliorato l'LCP del 41%
  • Paper Magazine ha riscontrato un aumento del 27% delle sessioni per utente
  • Blog MLT: diminuzione del tempo di caricamento della pagina del 21%

Cloudflare ha rilevato che SXG ha migliorato il TTFB per il 98% dei siti e ha migliorato l'LCP per l'85% dei siti, con un miglioramento mediano di oltre il 20% nei caricamenti di pagine idonee per SXG.

Indicizzazione

Le rappresentazioni SXG e non SXG di una pagina non vengono classificate o indicizzate in modo diverso dalla Ricerca Google. SXG è in ultima analisi un meccanismo di distribuzione, non modifica i contenuti sottostanti.

AMP

I contenuti AMP possono essere pubblicati utilizzando SXG. SXG consente di precaricare e visualizzare i contenuti AMP utilizzando l'URL canonico, anziché l'URL AMP.AMP dispone di strumenti separati per la generazione di SXG.Scopri come pubblicare AMP utilizzando Signed Exchange su amp.dev.

Debug di SXG con Chrome DevTools

Per vedere un SXG in prima persona, utilizza un browser Chromium, apri DevTools, apri il riquadro Rete e visita questa pagina di ricerca di esempio. Le piattaforme firmate possono essere identificate cercando signed-exchange nella colonna Type (Tipo).

Screenshot che mostra una richiesta SXG nel riquadro &quot;Rete&quot; in DevTools
Il riquadro Rete in DevTools

La scheda Anteprima fornisce ulteriori informazioni sui contenuti di un SXG.

Screenshot della scheda &quot;Anteprima&quot; di un SXG
La scheda Anteprima in DevTools

Utensili

L'implementazione degli SXG consiste nel generare l'SXG corrispondente a un determinato URL e quindi nell'offrirlo ai richiedenti (di solito i crawler).

Certificati

Per generare un SXG è necessario un certificato in grado di firmare gli SXG, anche se alcuni strumenti li acquisiscono automaticamente. In questa pagina sono elencate le autorità di certificazione che possono rilasciare questo tipo di certificato. I certificati possono essere ottenuti automaticamente dall'autorità di certificazione Google utilizzando qualsiasi client ACME. Il server Web Packager ha un client ACME integrato e a breve sxg-rs lo farà a breve.

Strumenti SXG specifici della piattaforma

Questi strumenti supportano stack tecnologici specifici. Se utilizzi già una piattaforma supportata da uno di questi strumenti, potresti trovare più facile da configurare rispetto a uno strumento generico.

Strumenti SXG per uso generico

Server HTTP sxg-rs

sxg-rs http_server agisce come proxy inverso per la gestione di SXG. Per le richieste dei crawler SXG, http_server firmerà le risposte dal backend e risponderà con un SXG. Per le istruzioni di installazione, consulta il file README.

Server Web Packager

Web Packager Server, webpkgserver, è un'alternativa a sxg-rs http_server, scritta in Go. Per istruzioni sulla configurazione del server Web Packager, consulta l'articolo su come configurare piattaforme di scambio firmate utilizzando Web Packager.

Interfaccia a riga di comando Web Packager

L'interfaccia a riga di comando Web Packager genera un SXG corrispondente a un determinato URL.

webpackager \
    --private\_key=private.key \
    --cert\_url=https://example.com/certificate.cbor \
    --url=https://example.com

Dopo aver generato il file SXG, caricalo sul server e pubblicalo con il tipo MIME application/signed-exchange;v=b3. Inoltre, dovrai pubblicare il certificato SXG come application/cert-chain+cbor.

Librerie SXG

Queste librerie possono essere utilizzate per creare il tuo generatore SXG:

  • sxg_rs è una libreria Rust per generare SXG. È la libreria SXG più completa e viene utilizzata come base per gli strumenti cloudflare_worker e fastly_compute.

  • libsxg è una libreria C minima per generare SXG. È utilizzato come base per il modulo NGINX SXG e per il filtro Envoy SXG.

  • go/signed-exchange è una libreria Go minima fornita dalla specifica del pacchetto web come implementazione di riferimento della generazione di SXG. Viene utilizzato come base per il suo strumento dell'interfaccia a riga di comando di riferimento, gen-signedexchange e per gli strumenti più funzionalità di Web Packager.

Negoziazione dei contenuti

I server dovrebbero pubblicare SXG quando l'intestazione Accept indica che il valore q per application/Sign-Exchange è maggiore o uguale al valore q per text/html. In pratica, ciò significa che un server di origine fornisce SXG ai crawler, ma non ai browser. Molti degli strumenti indicati sopra fanno questa operazione per impostazione predefinita, ma per altri strumenti è possibile usare la seguente espressione regolare per trovare corrispondenze con l'intestazione Accept delle richieste che dovrebbero essere pubblicate come SXG: http Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/

Questo suggerimento include esempi per Apache e nginx.

API Update cache

Google SXG Cache ha un'API che i proprietari dei siti possono utilizzare per rimuovere gli SXG dalla cache prima che scadano a causa di Cache-Control: max-age. Per maggiori dettagli, consulta il riferimento sull'API Update cache.

Collegamento a SXG

Qualsiasi sito può memorizzare nella cache, pubblicare e precaricare gli SXG delle pagine a cui rimanda, se disponibili, utilizzando i tag e : html <a href="https://example.com/article.html.sxg"> <link rel="prefetch" as="document" href="https://example.com/article.html.sxg"> Questo articolo spiega come usare nginx per distribuire SXG.

Vantaggi esclusivi

SXG è una delle tante tecnologie possibili per attivare il precaricamento multiorigine. Quando decidi quale tecnologia utilizzare, potresti dover scendere a compromessi tra l'ottimizzazione di diversi aspetti. Le sezioni seguenti illustrano alcuni dei valori univoci forniti da SXG nell'ambito delle possibili soluzioni. Questi fattori possono cambiare nel tempo con l’evolversi dello spazio delle soluzioni disponibili.

Meno richieste da pubblicare

Con il precaricamento di più siti, il server potrebbe dover pubblicare richieste aggiuntive. Corrisponde ai casi in cui una pagina è stata precaricata, ma l'utente non l'ha visitata oppure i byte precaricati non sono stati mostrati all'utente. Per SXG, queste richieste aggiuntive inutilizzate possono essere ridotte notevolmente:

  • Gli SXG vengono memorizzati nella cache e possono essere inviati agli utenti fino alla loro scadenza. Pertanto, molti precaricamenti possono essere gestiti esclusivamente dal server di cache.
  • Gli SXG possono essere mostrati agli utenti con e senza cookie sul tuo sito. Pertanto, ci sono meno momenti in cui la pagina dovrà essere recuperata di nuovo dopo la navigazione.

Miglioramento della velocità delle pagine

Potresti notare un ulteriore miglioramento della velocità delle pagine grazie alle piattaforme e alle funzionalità di precaricamento attualmente supportate:

  • Gli SXG possono essere mostrati agli utenti con cookie per il tuo sito.
  • Se specificato utilizzando un'intestazione Link, SXG precarica anche le sottorisorse per le pagine, ad esempio JavaScript, CSS, caratteri e immagini.
  • A breve, il precaricamento di SXG dalla Ricerca Google sarà disponibile per altri tipi di risultati di ricerca.

Conclusione

Le piattaforme Signed Exchange sono un meccanismo di consegna che consente di verificare l'origine e la validità di una risorsa, indipendentemente dalla modalità di distribuzione della risorsa. Di conseguenza, gli SXG possono essere distribuiti da terze parti mantenendo l'attribuzione completa dell'editore.

Per approfondire