Do you build things with AMP? Fill out the AMP Developer Survey!
AMP

Offerta di contenuti AMP utilizzando scambi firmati

AMP offre vantaggi in termini di velocità che vanno al di là del formato in uso grazie all'impiego di tecniche come la memorizzazione in cache e il pre-caricamento. Questi vantaggi possono portare alcuni effetti negativi, come la visualizzazione di URL aggiuntivi incorporati in un visualizzatore AMP. L'offerta di contenuti AMP utilizzando scambi firmati permette di utilizzare una nuova funzionalità della piattaforma web per evitare questi problemi.

Uno scambio firmato è costituito da un documento AMP valido e dall'URL originale dei contenuti ad esso associato. Queste informazioni sono protette da firme digitali che legano in modo sicuro i documenti al loro URL richiesto. Ciò consente ai browser di visualizzare in modo sicuro l'URL originale nella barra di navigazione al posto del nome della macchina host che ha trasmesso i dati al browser.

I contenuti AMP firmati si aggiungono a (e non sostituiscono) i normali contenuti AMP.

Image displaying URL from signed exchange

Questa funzione è attualmente supportata su Chrome, ma la sua mplementazione è prevista su molti altri browser.

Gli scambi firmati funzioneranno per i miei contenuti?

Per implementare gli scambi firmati, occorre soddisfare i seguenti requisiti:

  • Capacità di configurare e controllare le intestazioni HTTP generate dal proprio server. (La maggior parte delle soluzioni di hosting basate solo su web, quali Blogger, non sono compatibili con gli scambi firmati).
  • La capacità di generare scambi firmati AMP, ad esempio eseguendo amppackager, come Go binary o all'interno di macchine virtuali Docker.
    • Il packager deve essere aggiornato ogni sei settimane.
  • La possibiltà di usare Vary nelle intestazioni Accept e AMP-Cache-Transform sui server HTTP perimetrali, in grado di restituire contenuti diversi per lo stesso URL.
  • Il sistema su cui è in esecuzione amppackager deve essere in grado di effettuare richieste di rete in uscita per:
    • L'autorità di certificazione che emette il certificato
    • Il server dell'editore che ospita i documenti AMP da firmare
    • cdn.ampproject.org per accedere alla versione attuale di AMP
  • Un file system persistente per l'archiviazione condivisa tra tutte le istanze di amppackager in esecuzione nello stesso centro dati.

Implementazione di scambi firmati

Di seguito è riportata la sequenza di implementazione suggerita per supportare gli scambi firmati sui documenti AMP.

Acquisizione di un certificato TLS supportato

Per produrre scambi firmati, è necessario un certificato TLS con l'estensione CanSignHttpExchanges. A partire dall'aprile 2019, DigiCert è l'unico fornitore di questa estensione (qui maggiori informazioni).

Per generare il certificato, l'autorità di certificazione (CA) avrà bisogno di una richiesta di firma del certificato (CSR), che può essere generata da openssl. Un esempio di CSR per ampbyexample.com:

# generate private key (if necessary)
$ openssl ecparam -out ampbyexample-packager.key -name prime256v1 -genkey
# generate CSR (the file ampbyexample-packager.csr)
$ openssl req -new -key ampbyexample-packager.key -nodes -out ampbyexample-packager.csr -subj "/C=US/ST=California/L=Mountain View/O=Google LLC/CN=ampbyexample.com"

Individuazione di quali URL verranno firmati

Occorre creare uno schema di URL che definisca quali documenti devono essere firmati. È fondamentale che i contenuti privati, come le informazioni personalizzate, non vengano firmati, per evitare di inviare contenuti fuorvianti o errati.

Per garantire le migliori prestazioni, il packager dovrà ricevere in input solo documenti AMP validi. Alcuni documenti AMP non validi possono anche essere accettati se necessario, ma è meglio evitare l'invio di tutto il traffico tramite il packager.

Distribuzione del packager a un server di gestione temporanea

È necessario innanzitutto configurare gli scambi firmati su un server di gestione temporaea per verificare che la configurazione sia corretta prima di passare alla produzione.

Si consiglia di utilizzare amppackager per produrre scambi firmati. Tuttavia, se questo strumento non è adatto al proprio ambiente di produzione, si possono utilizzare i client della riga di comando transform e gen-signedexchange e gestire personalmente la negoziazione dei contenuti e la gestione dei certificati.

Le seguenti istruzioni si applicano alle distribuzioni che utilizzano amppackager.

Configurazione

Il file di configurazione di amppackager (amppkg.toml) richiede un FileCert e un KeyFile.

Il KeyFile contiene la chiave privata (ampbyexample-packager.key nell'esempio precedente) e dovrebbe avere il seguente formato. (Nota: non rendere pubblica la chiave privata e proteggerla da condivisioni involontarie!)

-----BEGIN EC PARAMETERS-----
BggqhkjOPQMBBw==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEINDgf1gprbdD6hM1ttmRC9+tOqJ+lNRtHwZahJIXfLADoAoGCCqGSM49
…
4j1NY29jVmAMQYrBYb+6heiv6ok+8c/zJQ==
-----END EC PRIVATE KEY-----

Il FileCert è il certificato pubblico. Se DigiCert ha fornito il certificato, questo può essere creato concatenando insieme il certificato specifico dell'origine fornito da DigiCert e il file DigiCertCA.crt.

-----BEGIN CERTIFICATE-----
MIIE0zCCBFmgAwIBAgIQCkEgeFknZluZtdcJnvdFCjAKBggqhkjOPQQDAjBMMQsw
CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMSYwJAYDVQQDEx1EaWdp
Q2VydCBFQ0MgU2VjdXJlIFNlcnZlciBDQTAeFw0xODEwMzAwMDAwMDBaFw0xOTEx
MDYxMjAwMDBaMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJjYTEWMBQGA1UEBxMN
TW91bnRhaW4gVmlldzETMBEGA1UEChMKR29vZ2xlIExMQzEZMBcGA1UEAxMQYW1w
YnlleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABAGu0CjzWa6i
…
PXLGRK8i0lr7Jv6ZKPY8tfaB/c5yK404QU4HNggmAiEAlnNjIerjJOLHb8CvVaUQ
nhhn0a35nHp1yvE651W14fMwCgYIKoZIzj0EAwIDaAAwZQIwI4/7dpqJQxkQwpP3
DAjVOFdjC6PDcUIRPll3bF0srrTUXSyZ8xkM4q/RhB51A0hVAjEAsUGNYBje9RIO
wf9qyV2iHB+9cBwgKfC0KvEcBugbgHShypM8hPhV9UMC3qTpdKPx
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDrDCCApSgAwIBAgIQCssoukZe5TkIdnRw883GEjANBgkqhkiG9w0BAQwFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0xMzAzMDgxMjAwMDBaFw0yMzAzMDgxMjAwMDBaMEwxCzAJBgNVBAYTAlVT
…
loB5hWp2Jp2VDCADjT7ueihlZGak2YPqmXTNbk19HOuNssWvFhtOyPNV6og4ETQd
Ea8/B6hPatJ0ES8q/HO3X8IVQwVs1n3aAr0im0/T+Xc=
-----END CERTIFICATE-----

Installazione

Seguire le istruzioni riportate qui per configurare amppackager sul proprio sito.

Consultare il file packager.js (usato da amp.dev) che contiene un esempio delle modifiche lato server che dovranno essere applicate per instradare le richieste ad amppkg.

Test

Verificare che il proprio sito di gestione temporanea risponda con contenuti di tipo MIME application/signed-exchange quando specificato dalla richiesta HTTP. Ad esempio (sostituire staging.example.com con il proprio server di gestione temporanea):

$ curl -si -H 'amp-cache-transform: google;v="1..100"' -H 'accept: application/signed-exchange;v=b3;q=0.9,*/*;q=0.8' https://staging.example.com/ | less

L'output deve includere questa riga:

content-type: application/signed-exchange;v=b3

L'elemento v="1..100" nella richiesta è un segnaposto. Non verificare la corrispondenza a questo valore esatto; invece, come descritto nelle istruzioni di installazione di amppackager, controllare solo l'esistenza dell'intestazione amp-cache-transform e ignorarne il valore.

La stringa della versione v=b3 nella risposta indica la versione di agosto 2019. Essa è destinata a cambiare.

La parte principale della risposta dovrebbe contenere la pagina AMP (in testo semplice). C'è una piccola intestazione binaria e, se la pagina è più grande di 16 kb, altri byte binari potranno trovarsi sparsi qua e là.

Lo strumento dump-signedexchange può essere utilizzato per controllare la risposta:

$ curl -s --output - -H 'amp-cache-transform: google;v="1..100"' -H 'accept: application/signed-exchange;v=b3;q=0.9,*/*;q=0.8' https://staging.example.com/ > example.sxg
$ dump-signedexchange -i example.sxg
format version: 1b3

(Nota: il commutatore -verify non funzionerà a questo punto perché i certificati richiesti non si trovano sul server https://example.com/).

Verificare che la risposta includa sempre l'intestazione Vary con il valore Accept,AMP-Cache-Transform (indipendentemente dal fatto che il tipo MIME sia text/html, application/signed-exchange o altro):

$ curl -si https://staging.example.com/ | less

L'output deve includere questa riga:

vary: Accept,AMP-Cache-Transform

Distribuzione del packager alla produzione

Installazione

Adattare la procedura di distribuzione nella fase di gestione temporanea sopra descritta in base alle esigenze del proprio ambiente di produzione.

Test

Con strumenti da riga di comando

Eseguire gli stessi test sopra descritti. Anche dump-signedexchange -verify ora dovrebbe funzionare.

Con Chrome

I test possono anche essere eseguiti in Chrome grazie all'estensione ModHeade. Installarla da Chrome Webstore e configurare le Request Headers per amp-cache-transform con un Value pari a google.

Dopo aver richiesto https://example.com/, il server consegnerà uno scambio firmato, ma il documento dovrebbe apparire e comportarsi come prima. Tramite la console DevTools si dovrà verificare che uno scambio firmato sia restituito correttamente.

Nella scheda Network, fare clic sul nome del proprio dominio e verificare che il valore Signed HTTP exchange sia visualizzato in Preview.

Con la cache AMP Google

Verificare che gli scambi firmati siano compatibili con la cache AMP Google. Ciò garantisce la loro individuabilità sui motori di ricerca come Google Search.

Per testare gli scambi firmati nella cache AMP Google, aprire la scheda di rete in DevTools, abilitare l'opzione Preserve log e visitare un URL come https://example-com.cdn.ampproject.org/wp/s/example.com/.

Se la richiesta ha avuto successo, DevTools mostrerà un 200 con una riga signed-exchange e una riga from signed-exchange.

In caso di esito negativo, le righe dello scambio firmato mancheranno o saranno evidenziate in rosso. Potrebbe essere presente anche un'intestazione warning che fornisce informazioni aggiuntive.

Se la distribuzione delle pagine AMP con scambi firmati è avvenuta correttamente, i risultati della loro ricerca mostreranno il simbolo del fulmine AMP, come prima, ma toccando i risultati nella barra degli URL verrà visualizzato l'indirizzo https://example.com, invece di un URL che inizia con https://www.google.com/amp/….. Inoltre, la barra del viewer non comparirà.

Nella scheda network della console DevTools, sarà possibile vedere l'indicazione signed-exchange sotto la colonna type.

Fornitori di servizi per scambi firmati

Segue un elenco di CDN e fornitori di servizi di hosting che già supportano scambi firmati. Il loro utilizzo è il modo più semplice per iniziare con gli scambi firmati:

  • URL reali di Cloudflare AMP. Cloudflare è una delle reti più grandi al mondo. Oggi, aziende, organizzazioni non-profit, blogger e chiunque abbia una presenza su Internet può contare su siti web e app più veloci e sicuri grazie a Cloudflare.