Formato URL della cache AMP e gestione delle richieste
In questo documento imparerai a conoscere il formato URL della cache AMP e come essa gestisce le richieste.
Formato URL
Se possibile, la cache AMP di Google creerà un sottodominio per il dominio di ciascun documento AMP convertendolo prima da IDN (punycode) in UTF-8. Le cache sostituiscono ogni -
(trattino) con --
(2 trattini) e ogni .
(punto) con -
(trattino). Ad esempio, pub.com
sarà tradotto in pub-com.cdn.ampproject.org
.
Si può utilizzare questo calcolatore di URL per convertire un URL in una versione per la cache AMP:
Questo documento descrive:
- La struttura dell'URL su una cache AMP.
- Come appariranno gli URL su una cache AMP.
- Come riconvertire l'intestazione di un'origine AMP Cache per determinare il suo dominio di editore.
Protocollo Nome Dominio
Tutti i documenti utilizzano il protocollo https nelle cache AMP.
Suffisso Nome Dominio
Tutte le cache AMP sono registrate in un file JSON, disponibile online nell'archivio AMPHTML. Un esempio di cache record in questo file sarà simile al seguente:
{
"id": "google",
"name": "Google AMP Cache",
"docs": "https://developers.google.com/amp/cache/",
"cacheDomain": "cdn.ampproject.org",
"updateCacheApiDomainSuffix": "cdn.ampproject.org",
"thirdPartyFrameDomainSuffix": "ampproject.net"
},
Una cache AMP fornisce i record nel dominio specificato da cacheDomain
. In questo caso, il dominio è cdn.ampproject.org
.
Questo documento utilizza URL con cdn.ampproject.org
come esempi, ma le altre cache in genere utilizzano una struttura URL simile.
Prefisso Nome Dominio
Una cache AMP fornisce i documenti su un URL modificato, come example-com.cdn.ampproject.org
. Il primo componente con punto del nome di dominio originale, nell'esempio example.com
, diventa example-com
. Questo documento definisce tale stringa senza punto, example-com
, come "prefisso di dominio". Di seguito è presentato l'algoritmo che esegue questa trasformazione.
In questo prefisso non è possibile usare più componenti con punto, come example.com.cdn.ampproject.org
, a causa del vincolo sui certificati https (TLS), previsto dallo standard RFC 2818:
Names may contain the wildcard character * which is considered to match any single domain name component or component fragment. E.g., *.a.com matches foo.a.com but not bar.foo.a.com.
I domini degli editori possono avere una lunghezza massima di 255 caratteri, mentre ogni prefisso di dominio è limitato a 63 caratteri, come richiesto dallo standard RFC 2181 che prevede:
The length of any one label is limited to between 1 and 63 octets. A full domain name is limited to 255 octets (including the separators).
Tutti i domini degli editori vengono mappati a un prefisso di dominio univoco. L'algoritmo che se ne occupa tenta di produrre un mapping leggibile all'uomo. Tuttavia, il mapping è riconvertito tramite un algoritmo di hashing sicuro per i domini degli editori se essi sono troppo lunghi e nei casi descritti di seguito:
Algoritmo di base
L'algoritmo di base per convertire un dominio di editore in un prefisso di dominio è il seguente:
- Effettuare la decodifica Punycode del dominio dell'editore. Consultare RFC 3492
- Sostituire ogni carattere "
-
" (trattino) nel risultato prodotto dal passo 1 con "--
" (due trattini). - Sostituire ogni carattere "
.
" (punto) nel risultato prodotto dal passo 2 con "-
" (trattino). - Se il risultato del passo 3 presenta un "
-
" (trattino) in entrambe le posizioni 3 e 4, aggiungere al risultato del passo 3 un prefisso "0-
" e un suffisso "-0
". Consultare # 26205 per altre informazioni. - Effettuare la codifica Punycode del risultato del passo 3. Consultare RFC 3492
Alcuni esempi dell'algoritmo base:
Dominio editore | Prefisso di dominio |
example.com |
example-com |
foo.example.com |
foo-example-com |
foo-example.com |
foo--example-com |
xn--57hw060o.com (⚡😊.com) | xn---com-p33b41770a (⚡😊-com) |
en-us.example.com |
0-en--us-example-com-0 |
Dopo aver eseguito l'algoritmo base, se e solo se il prefisso di dominio non è un'etichetta DNS valida, eseguiremo l'algoritmo di fallback descritto di seguito.
Un prefisso di dominio non è un'etichetta DNS valida se è più lungo di 63 caratteri
Algoritmo di fallback
L'algoritmo di fallback per convertire il dominio di un editore in un prefisso di dominio è il seguente:
- Effettuare l'hashing del dominio dell'editore utilizzando l'algoritmo SHA256.
- Effettuare l'escape base32 del risultato del passo 1.
- Rimuovere gli ultimi 4 caratteri dal risultato del passo 2, che sono tutti caratteri
=
(uguale).
L'algoritmo di fallback produrrà una stringa di 52 caratteri come la seguente senza -
(trattino): v2c4ucasgcskftbjt4c7phpkbqedcdcqo23tkamleapoa5o6fygq
.
Algoritmo combinato
L'algoritmo combinato prevede la seguente procedura:
- Eseguire l'algoritmo di base. Se l'output è un'etichetta DNS valida, aggiungere il suffisso di dominio della cache e terminare, ad esempio
example-com.cdn.ampproject.org
. Altrimenti proseguire al passo 2. - Eseguire l'algoritmo di fallback. Aggiungere il suffisso di dominio della cache e terminare, ad esempio:
v2c4ucasgcskftbjt4c7phpkbqedcdcqo23tkamleapoa5o6fygq.cdn.ampproject.org
Percorso URL
Il "percorso" di un URL nella cache AMP è sempre composto da una o più directory di prefisso, quali /c
, seguite da un infisso /s
solo se l'URL dell'editore è http s
, seguito ancora dall'URL del documento dell'editore senza il protocollo.
Le directory di prefisso, come /c
, corrispondono ai diversi tipi di servizio che una cache AMP può fornire. Diverse cache AMP possono supportare diversi tipi di servizi e il seguente non è un elenco completo:
/c
- Contenuto: questo è un documento AMP fornito come pagina autonoma cui è possibile collegarsi direttamente in alcune interfacce./v
- Visualizzatore: anche questo è un documento AMP, ma viene fornito in un visualizzatore AMP, che è un riquadro per la visualizzazione di documenti AMP nel contesto di una Pagina Risultati di Ricerca o altre interfacce./wp
- Web Package: questo è un documento AMP fornito come Signed Exchange, una tecnologia Pacchetto web. Questi URL permettono di reindirizzare alla pagina di origine dell'editore./cert
- Certificato: questo è un certificato pubblico da utilizzare con un oggetto signed exchange./i
- Immagine: questa è un'immagine fornita dalla cache AMP, in genere come sottorisorsa del documento./ii
- Immagine: anche questa è un'immagine fornita dalla cache AMP, ma in genere può essere combinata con altri parametri di configurazione della cache, quali/ii/w800
, che indica una larghezza massima richiesta dal documento. La cache può produrre immagini con diverse dimensioni per risparmiare larghezza di banda per il browser.
Inoltre, le cache AMP possono scegliere di aggiungere parametri di query speciali in coda all'URL del documento che non fanno parte della query del documento dell'editore. Ad esempio, <amp-live-list>
effettua richieste di aggiornamento recuperando un documento con il parametro amp_latest_update_time<
. Questi parametri non vengono passati all'origine durante la ricerca del documento, ma sono presenti solo per configurare la richiesta alla cache AMP.
Origini CORS
Molti editori utilizzano le richieste CORS dal loro documento AMP per recuperare dati aggiuntivi. Le richieste CORS funzionano inviando un'intestazione HTTP Origin:
nella richiesta che specifica l'origine del documento che la effettua. Come visto in precedenza, l'origine del documento è diversa su una cache AMP rispetto al documento originale. Nelle precedenti sezioni sui nomi di dominio, abbiamo presentato l'algoritmo per determinare l'origine di un URL della cache AMP dato l'URL dell'editore. Di seguito riportiamo l'algoritmo inverso per riconvertire l'intestazione di una richiesta CORS Origin:
al dominio dell'editore originale.
Dall'origine della cache AMP al dominio dell'editore
Il valore dell'intestazione Origin di una cache AMP sarà simile a uno dei seguenti esempi:
https://www-example-com.cdn.ampproject.org
https://v2c4ucasgcskftbjt4c7phpkbqedcdcqo23tkamleapoa5o6fygq.cdn.ampproject.org
Innanzitutto, rimuovere il prefisso del protocollo (https://
) e il suffisso del dominio della cache AMP, ad esempio .cdn.ampproject.org
. Il suffisso può provenire da una qualsiasi delle cache elencate in caches.json. La stringa rimanente sarà il "prefisso di dominio". Nel caso dei due esempi precedenti, il "prefisso di dominio" è:
www-example-com
v2c4ucasgcskftbjt4c7phpkbqedcdcqo23tkamleapoa5o6fygq
Poi, occorre controllare se il "prefisso di dominio" contiene almeno un '-
' (trattino). La presenza di uno o più trattini è di gran lunga il caso più comune. Se il "prefisso di dominio" non contiene almeno un '-
' (trattino), l'origine della cache AMP non può essere riconvertita direttamente. Se invece è noto l'insieme dei possibili domini degli editori, è possibile creare l'insieme delle origini della cache AMP, utilizzando l'algoritmo del nome dominio presentato in questo documento. È quindi possibile effettuare una convalida rispetto all'insieme fissato.
Il resto dell'algoritmo assume che il "prefisso di dominio" contenga almeno un '-
' (trattino).
- Se il prefisso di dominio inizia con
xn--
, effettuare la decodifica punycode del "prefisso di dominio". Ad esempioxn---com-p33b41770a
diventa⚡😊-com
. Consultare lo standard RFC 3492 per i dettagli sulla codifica punycode. - Se il prefisso di dominio inizia con "
0-
" e termina con "-0
", rimuovere sia il prefisso "0-
" che il suffisso "-0". - Scorrere in ordine i caratteri del risultato del passo 2, inserendoli nel nuovo risultato come si trovano. Quando si incontra un "
-
" (trattino), dare un'occhiata al carattere successivo. Se anche il carattere successivo è un "-
" (trattino), saltare entrambi i caratteri dall'input e inserire un singolo "-
" (trattino). Se il carattere seguente è un qualsiasi altro carattere, saltare solo il singolo "-
" (trattino) attualmente scandito e dare in output un ".
" (punto). Ad esempio,a--b-example-com
diventaab.example.com
. - Effettuare la codifica Punycode del risultato del passo 3. Consultare lo standard RFC 3492 per la codifica punycode.
Il risultato del passo 4 sarà il dominio dell'editore. Il protocollo non è disponibile dal dominio stesso, ma può essere solo http
o https
. La porta è sempre quella predefinita per il protocollo.
Reindirizzamento e gestione degli errori
Di seguito sono riportati alcuni esempi di come la cache AMP gestisce i reindirizzamenti e gli errori:
Reindirizzamenti
La cache AMP segue i reindirizzamenti durante la risoluzione degli URL AMP. Ad esempio, se un URL reindirizza a un altro URL AMP:
$ curl -I https://amp.dev/documentation/examples/api/redirect?url=https://amp.dev/index.amp.html
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://amp.dev/index.amp.html
...
Quindi la cache AMP restituirà il contenuto del reindirizzamento risolto per l'URL originale.
Non trovato
Quando una pagina non si trova nella cache AMP, il sistema mostrerà una pagina di errore e restituirà uno stato 404.
Esempio: https://amp-dev.cdn.ampproject.org/amp.dev/documentation/examples/api/not-found
Pagine AMP non valide
Quando una pagina AMP non è valida, la cache AMP reindirizzerà alla pagina canonica.
Esempio: https://amp-dev.cdn.ampproject.org/amp.dev/documentation/examples/api/invalid-amp
Errori del server
Se un URL restituisce un errore server di tipo 5XX, la cache AMP restituirà uno stato 404.
Esempio: https://amp-dev.cdn.ampproject.org/amp.dev/documentation/examples/api/server-error
-
Written by @Gregable
with contributions from @sebastianbenz