La compressione dinamica comprime automaticamente le risposte fornite da Cloud CDN. La dimensione dei dati inviati attraverso la rete si riduce dal 60% all'85% nella di assistenza.
La riduzione delle dimensioni riduce il tempo necessario per scaricare i contenuti. Per importanti asset come i fogli di stile (CSS), gli script (JavaScript) e i video manifest (HLS/DASH), ciò può ridurre il caricamento pagina e i tempi di avvio dei video.
Puoi trovare ulteriori informazioni sui vantaggi della compressione delle risposte nel Concetti fondamentali del Web .
Puoi abilitare la compressione su un servizio di backend o un bucket di backend.
Esempi di casi d'uso
La compressione dinamica riduce direttamente le dimensioni dei dati inviati Cloud CDN perimetrale al client. Con questa operazione puoi eseguire direttamente le seguenti operazioni:
- Riduce le dimensioni di CSS e JavaScript, facilitando il rendering delle pagine web più rapidamente e riducendo i tempi di creazione di First Contentful Paint, importante metrica sul rendimento web.
Hanno un grande impatto positivo quando memorizzano nella cache le risposte dell'API REST, ad esempio Payload JSON. Questi payload si comprimono bene a causa dei tasti ripetuti, spazi vuoti e parentesi graffe. La memorizzazione nella cache delle API pubbliche per 5-10 secondi è per ridurre il carico dell'origine mantenendo l'aggiornamento dei dati.
Anche senza memorizzazione nella cache, la compressione di queste risposte può ridurre il numero di byte inviati fino al 90%.
Migliora l'ora di inizio della riproduzione per la distribuzione dei video e la latenza di join per in live streaming. Le playlist dal vivo di grandi dimensioni (manifest) hanno una quantità significativa di dati ripetuti, incluso l'host + prefisso del percorso di ogni segmento, nonché come metadati della playlist HLS o DASH. Più la playlist viene caricata gli aggiornamenti delle playlist possono essere scaricati, minore è il tempo di attesa del cliente per analizzare e iniziare a scaricare i segmenti video di riferimento. HLS e DASH le playlist spesso registrano una riduzione delle dimensioni totale di oltre il 90%.
Prima di iniziare
Assicurati di disporre di quanto segue:
- Un backend abilitato per Cloud CDN configurato. Se non disponi di Cloud CDN attualmente configurato, puoi seguire una delle guide per la configurazione.
- Nel backend sono pronti contenuti comprimibili per la pubblicazione, ad esempio asset web o manifest video compresi tra 1 KiB e 10 MiB (incluso).
- I client non fanno affidamento sul recupero di contenuti parziali con richieste di intervallo o con ETag efficaci. Si tratta di incompatibili con la compressione dinamica.
- I client possono gestire le risposte senza
Content-Length
intestazioni. Ad esempio, gli errori della cache che Cloud CDN esegue non hanno intestazioniContent-Length
. - IAM
Ruolo Amministratore bilanciatore del carico Compute
(
roles/compute.loadBalancerAdmin
), necessario per apportare modifiche alla configurazione del backend.
Abilita la compressione su un servizio di backend o un bucket di backend
Per attivare la compressione, procedi nel seguente modo.
Console
Aggiungi una nuova origine
Per aggiungere e configurare una nuova origine, segui le istruzioni in Panoramica della configurazione per il tipo di backend appropriato. Quando crei l'origine, usa la sezione Opzioni avanzate per configurare Compressione dinamica selezionando Automatica in Modalità di compressione dall'elenco di lettura.
Modificare un'origine esistente
Per modificare un'origine Cloud CDN esistente:
Nella console Google Cloud, vai alle origini di Cloud CDN .
Fai clic sul nome dell'origine che vuoi modificare, quindi su Modifica.
Nella sezione Nozioni di base sull'origine, fai clic su Avanti.
Nella sezione Regole host e percorso, fai clic su Avanti.
Nella sezione Prestazioni della cache, vai a Opzioni avanzate.
Nell'elenco Modalità di compressione, seleziona Automatica.
Per applicare le modifiche, fai clic su Fine.
gcloud
Per i servizi di backend, utilizza il comando gcloud compute backend-services
create
oppure
Comando gcloud compute backend-services
update
con il flag --compression-mode
.
Per i bucket di backend, utilizza il comando gcloud compute backend-buckets create
o il comando gcloud compute backend-buckets update
con il flag --compression-mode
.
Per un nuovo servizio di backend, utilizza il comando create
:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --compression-mode=AUTOMATIC
Per un servizio di backend esistente, usa il comando update
:
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --compression-mode=AUTOMATIC
Per un nuovo bucket di backend, utilizza il comando create
:
gcloud compute backend-buckets create BACKEND_BUCKET_NAME --compression-mode=AUTOMATIC
Per un bucket di backend esistente, utilizza il comando update
:
gcloud compute backend-buckets update BACKEND_BUCKET_NAME --compression-mode=AUTOMATIC
compression-mode
può essere uno dei seguenti:
AUTOMATIC
: utilizza automaticamente la compressione migliore in base all'intestazioneAccept-Encoding
inviata dal client. Nella maggior parte dei casi, ciò determina la preferenza della compressione Brotli.DISABLED
(predefinito): disattiva la compressione.
API
Per i servizi di backend, utilizza
backendServices.insert
o il metodo
metodo backendServices.update
.
Per i bucket di backend, utilizza
backendBuckets.insert
o il metodo
metodo backendBuckets.update
.
Utilizza uno dei seguenti comandi:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
Aggiungi il seguente snippet al corpo della richiesta JSON:
"compressionMode": AUTOMATIC
compression-mode
può essere uno dei seguenti:
AUTOMATIC
(consigliato): utilizza automaticamente la compressione migliore in base all'intestazioneAccept-Encoding
inviata dal client. Nella maggior parte dei casi, ciò determina la preferenza della compressione Brotli.DISABLED
(predefinito): disattiva la compressione.
Entro pochi minuti, la configurazione si propaga a tutte le località perimetrali. I contenuti comprimibili forniti dal backend vengono compressi prima di essere disponibili al cliente.
Modalità di compressione
La modalità di compressione predefinita è DISABLED
.
La modalità AUTOMATIC
consente a Cloud CDN di scegliere il metodo di compressione migliore
in base a quanto segue:
- La codifica accettata dal client
- Il rapporto di compressione previsto della risposta
- Velocità di compressione (velocità effettiva) di Cloud CDN
Brotli può produrre dal 10% al 20% in più di riduzione delle dimensioni di download per la maggior parte dei tipi di contenuti su gzip, con simili prestazioni di decompressione, rendendole più veloci nel complesso se si considera il download il tempo e la velocità di decompressione sul client.
Cloud CDN indica il metodo di compressione scelto come
gzip
o brotli
nell'intestazione Content-Encoding
della risposta.
Cloud CDN determina il livello di compressione da bilanciare dimensioni totali di download e costo della CPU sul client. I livelli di compressione più elevati non va sempre a vantaggio del rendimento, soprattutto sui dispositivi mobili meno potenti.
Quando Cloud CDN comprime inizialmente i contenuti, rimuove
Content-Length
della risposta; Ciò è necessario per consentire
la risposta venga fornita il più rapidamente possibile perché l'intero contenuto
la lunghezza non è nota fino a quando l'intera risposta non è stata compressa.
Dopo che una risposta è stata compressa
e memorizzata nella cache, Cloud CDN potrebbe
includi l'intestazione Content-Length
nelle risposte successive.
(per HTTP/1.1 e versioni precedenti, Cloud CDN utilizza Transfer-Encoding:
chunked
nella risposta quando non utilizza Content-Length
.)
Quando viene compressa una risposta?
Se una richiesta ha un'intestazione Accept-Encoding
che elenca esplicitamente il supporto per
in formato gzip o Brotli, quindi le risposte non compresse fornite dal
backend (origin) con un'intestazione Content-Type
che corrisponde
i tipi di contenuti comprimibili vengono compressi con gzip o
Brotli, di conseguenza. Se una richiesta non ha un'intestazione Accept-Encoding
o se ha
Accept-Encoding: *
, la risposta non viene compressa.
Ad esempio, data un'intestazione Accept-Encoding
in una richiesta del client, la risposta
sia compresso (o meno) in base alle informazioni nella seguente tabella:
Intestazione della richiesta Accept-Encoding | Codifica della risposta |
---|---|
gzip, compress, br |
Brotli |
deflate |
Non compresso |
deflate, gzip |
gzip |
identity |
Non compresso |
* |
Non compresso |
Tipi di contenuti comprimibili
La compressione dinamica si applica ai seguenti tipi MIME, in base ai
Intestazione della risposta HTTP Content-Type
. Risposte senza Content-Type
l'intestazione della risposta non viene compressa.
I tipi di contenuti più comuni e i relativi tipi MIME includono:
- Contenuti HTML:
text/html
- Fogli di stile:
text/css
- JavaScript:
application/javascript
- JSON:
application/json
- Playlist HLS:
application/x-mpegURL
oapplication/vnd.apple.mpegURL
- Manifest DASH:
application/dash+xml
La tabella seguente riassume il modo in cui il tipo MIME influisce sulla comprimibilità.
Tipi MIME comprimibili | |
---|---|
Corrispondenza esatta | application/x-javascript application/x-sdch-dictionary application/javascript applicazione/xml applicazione/csv application/json application/json+protobuf application/signed-exchange application/vnd.apple.mpegurl applicazione/wasm application/x-plist application/x-protobuffer application/x-protobuf application/x-nacl application/x-pnacl carattere/ttf font/otf carattere/eot immagine/svg+xml immagine/raster-pwg immagine/icona x immagine/vnd.microsoft.icon video/vnd.mpeg.dash.mpd audio/mpegURL application/dash+xml application/vnd.ms-sstr+xml |
Corrispondenza di schema | application/*+json application/*+xml application/*mpegURL testo/* |
Formati di immagini e video (ad esempio image/jpeg
, image/png
e video/mpeg4
)
sono quasi sempre già compressi, quindi Cloud CDN non comprime
che li rappresentano. La ricompressione di una risposta già compressa raramente riduce le dimensioni del file,
e i clienti potrebbero presentare un comportamento
inaspettato quando ricevono una risposta
gentile.
Quando una risposta non viene compressa?
La compressione dinamica non comprime una risposta che ha uno o caratteristiche:
- La risposta non ha un'intestazione
Content-Type
corrispondente a un tipo di contenuto comprimibile. - Non ha un'intestazione
Content-Length
. - Ha un'intestazione
Content-Encoding
. È inferiore a 1 KiB.
Il tempo impiegato per comprimere e decomprimere spesso i vantaggi. Ci sono anche meno contenuti da comprimere, il che può ridurre l'efficacia di compressione e ridurre il rapporto di compressione.
È più grande di 10 MiB.
Ha un'intestazione
Cache-Control: no-transform
.Ha un'intestazione
Vary: Accept-Encoding
.
Richieste di intervallo
Quando Cloud CDN comprime una risposta, Cloud CDN
aggiunge un'intestazione Accept-Ranges: none
e sostituisce qualsiasi elemento Accept-Ranges
esistente
intestazioni. Gli hit della cache per queste risposte ignorano le intestazioni Range
.
In questo modo si impedisce la pubblicazione per i client di contenuti parziali non corretti, in quanto non sono assicurandosi se un client si aspetta un intervallo di byte dalla non compressa di una risorsa.
ETags
Quando la compressione dinamica comprime una risposta, tutte le intestazioni ETag efficaci vengono
indebolito, come richiesto dalla sezione RFC 7232
2,3
Ad esempio, ETag: "xyzzy"
viene sostituito con ETag: W/"xyzzy"
.
Intestazione Varia
Quando si fornisce una risposta che potrebbe essere compressa (a seconda
automaticamente la richiesta), Cloud CDN aggiunge l'intestazione Vary: Accept-Encoding
la risposta corretta.
Riepilogo delle modifiche alle risposte
La tabella seguente riassume le modifiche apportate da Cloud CDN a intestazioni di una risposta quando si è verificata la compressione:
Intestazione della risposta | Valore intestazione dopo la compressione |
---|---|
Codifica dei contenuti | Impostalo su gzip o brotli. |
ETag | Qualsiasi tag entità forte viene sostituito con una versione indebolita, indicato dal prefisso W/. |
Intervalli di accettazione | Imposta il valore none. |
Contenuti-Lunghezza | Potrebbe essere rimosso completamente o, se presente, impostato sulla lunghezza dei contenuti del corpo compresso. |
Codifica-trasferimento | Per HTTP/1.1 e protocolli precedenti, se Cloud CDN rimuove Content-Length, aggiunge questa intestazione, con il valore impostato su chunked e divide il corpo della risposta in blocchi. |
Logging
I log di Cloud CDN includono un campo compressionStatus
nella
jsonPayload
che indica se la risposta è stata compressa dal carico
e il tipo di compressione.
{ insertId: "1c02hw9g3gjay67" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" statusDetails: "response_sent_by_backend" cacheId: "IAD-862d661f" compressionStatus: "br" } }
Fatturazione
Quando una risposta viene compressa da Cloud CDN o Cloud Load Balancing, il trasferimento di dati pertinente dalla cache in uscita o il trasferimento di dati internet in uscita (rispettivamente) viene misurato in base ai byte compressi finali inviati al client.
Se stai pubblicando un numero elevato di risposte comprimibili, questo può di una riduzione delle tariffe mensili per il trasferimento di dati in uscita e di un aumento il rendimento per gli utenti finali.
Metriche
Se la compressione è abilitata, la metrica https/response_bytes_count
esistente
in loadbalancing.googleapis.com
indica le dimensioni della risposta compressa.
È probabile che si verifichi un calo dei byte di risposta totali (e del trasferimento di dati in uscita) e la velocità effettiva effettiva).
Se pubblichi grandi quantità di contenuti di testo che si comprimeno bene, ad esempio HTML, CSS, JavaScript o JSON, potresti notare un calo significativo byte.
Per ulteriori informazioni, vedi Monitoraggio.
Passaggi successivi
- Per capire in che modo le modalità cache semplificano la memorizzazione dei contenuti nella cache, consulta: Cambiare le modalità cache.
- Per abilitare Cloud CDN per le tue istanze con bilanciamento del carico HTTP(S), bucket di archiviazione, consulta la Panoramica della configurazione.
- Per scoprire di più sull'annullamento della convalida delle cache, consulta Annullamento convalida cache Panoramica.
- Per trovare i punti di presenza GFE, consulta Posizioni della cache.