Activer la compression dynamique

La compression dynamique compresse automatiquement les réponses diffusées par Cloud CDN. La taille des données envoyées sur le réseau est réduite de 60 à 85 % dans les cas typiques.

La réduction de la taille réduit le temps de téléchargement du contenu. Pour les éléments importants tels que les feuilles de style (CSS), les scripts (JavaScript) et les fichiers manifestes vidéo (HLS/DASH), cela peut réduire le temps de chargement des pages et le temps de démarrage des vidéos.

Pour en savoir plus sur les avantages de la compression des réponses, consultez le guide Web Fundamentals.

Vous pouvez activer la compression sur un service de backend ou un bucket backend.

Exemples de cas d'utilisation

La compression dynamique réduit directement la taille des données envoyées de la périphérie de Cloud CDN au client. Les opérations suivantes peuvent alors être directement effectuées :

  • Réduire la taille des fichiers CSS et JavaScript, ce qui permet aux pages Web de s'afficher plus rapidement et réduit la durée d'exécution de First Contentful Paint, une métrique importante en termes de performances Web.
  • Avoir un impact important et positif lors de la mise en cache de réponses d'API REST, telles que des charges utiles JSON. Ces charges utiles sont compressées facilement en raison des clés, des espaces et des accolades répétés. La mise en cache d'API publiques pendant 5 à 10 secondes est une approche populaire pour réduire la charge d'origine tout en conservant l'actualisation des données.

    Même sans mise en cache, la compression de ces réponses peut réduire le nombre total d'octets envoyés jusqu'à 90 %.

  • Améliorer le temps de début lecture pour la diffusion de vidéos et la latence de jointure pour la diffusion en direct. Les grandes playlists en direct (fichiers manifestes) contiennent une quantité importante de données répétées, y compris le préfixe d'hôte et de chemin d'accès de chaque segment, ainsi que les métadonnées de la playlist HLS ou DASH. Plus le téléchargement de la playlist ou les mises à jour de la playlist est rapide, moins le client doit attendre pour analyser et commencer à télécharger les séquences vidéo référencées. La taille des playlists HLS et DASH présente souvent une réduction totale de plus de 90 %.

Avant de commencer

Assurez-vous de disposer des éléments suivants:

  • Un backend compatible avec Cloud CDN configuré Si vous n'avez pas Cloud CDN actuellement configuré, vous pouvez suivre l'une des guides de configuration.
  • Votre backend dispose d'un contenu compressible prêt à être diffusé, tel que des éléments Web ou des fichiers manifestes vidéo compris entre 1 Kio et 10 Mio (inclus).
  • Les clients n'ont pas besoin d'extraire une partie du contenu avec requêtes de plage ou avec des ETags forts. Ils sont incompatibles avec la compression dynamique.
  • Les clients peuvent gérer les réponses sans Content-Length headers. Par exemple, les défauts de cache (miss) que Cloud CDN compresse ne comportent pas d'en-têtes Content-Length.
  • IAM Rôle d'administrateur de l'équilibreur de charge Compute (roles/compute.loadBalancerAdmin), qui est nécessaire pour modifier la configuration du backend.

Activer la compression sur un service de backend ou un bucket backend

Pour activer la compression, procédez comme suit :

Console

Ajouter une origine

Pour ajouter et configurer une nouvelle origine, suivez les instructions fournies dans Présentation de la configuration pour le type de backend approprié Lorsque vous créez votre origine, utilisez la section Options avancées pour configurer compression dynamique en sélectionnant Automatique dans le mode de compression. liste.

Modifier une origine existante

Pour modifier une origine Cloud CDN existante, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Origines Cloud CDN.

    Accéder à la page des origines Cloud CDN

  2. Cliquez sur le nom du point de départ que vous souhaitez modifier, puis sur Modifier.

  3. Dans la section Paramètres de base de l'origine, cliquez sur Suivant.

  4. Dans la section Règles d'hôte et de chemin d'accès, cliquez sur Suivant.

  5. Dans la section Performances du cache, accédez à Options avancées.

  6. Dans la liste Mode de compression, sélectionnez Automatique.

  7. Pour appliquer vos modifications, cliquez sur OK.

gcloud

Pour les services de backend, utilisez la commande gcloud compute backend-services create ou Commande gcloud compute backend-services update avec l'indicateur --compression-mode.

Pour les buckets backend, exécutez la commande gcloud compute backend-buckets create. ou la commande gcloud compute backend-buckets update avec l'indicateur --compression-mode.

Pour un nouveau service de backend, utilisez la commande create :

gcloud compute backend-services create BACKEND_SERVICE_NAME \
    --compression-mode=AUTOMATIC

Pour un service de backend existant, exécutez la commande update :

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --compression-mode=AUTOMATIC

Pour un nouveau bucket backend, utilisez la commande create :

gcloud compute backend-buckets create BACKEND_BUCKET_NAME
    --compression-mode=AUTOMATIC

Pour un bucket backend existant, exécutez la commande update :

gcloud compute backend-buckets update BACKEND_BUCKET_NAME
    --compression-mode=AUTOMATIC

L'élément compression-mode peut avoir l'une des valeurs suivantes :

  • AUTOMATIC: utilise automatiquement la meilleure compression en fonction de l'en-tête Accept-Encoding envoyé par le client. Dans la plupart des cas, la compression Brotli est préférable.
  • DISABLED (par défaut) : désactive la compression.

API

Pour les services de backend, utilisez backendServices.insert ou backendServices.update.

Pour les buckets backend, utilisez la classe backendBuckets.insert ou backendBuckets.update.

Exécutez l'une des commandes suivantes:

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

Ajoutez l'extrait suivant au corps de la requête JSON :

"compressionMode": AUTOMATIC

L'élément compression-mode peut avoir l'une des valeurs suivantes :

  • AUTOMATIC (recommandé): utilise automatiquement la meilleure compression en fonction de l'en-tête Accept-Encoding envoyé par le client. Dans la plupart des cas, la compression Brotli est préférable.
  • DISABLED (par défaut) : désactive la compression.

En quelques minutes, votre configuration se propage à tous les emplacements périphériques. Le contenu compressible diffusé à partir du backend est compressé avant d'être distribué au client.

Modes de compression

Le mode de compression par défaut est DISABLED.

Le mode AUTOMATIC permet à Cloud CDN de choisir la meilleure méthode de compression en fonction des éléments suivants :

  • L'encodage accepté par le client
  • Le taux de compression attendu de la réponse
  • La vitesse de compression de Cloud CDN (débit)

Le Brotli peut produire 10 à 20 % supplémentaires de réduction de la taille de téléchargement pour la plupart des types de contenu de décompression, ce qui accélère globalement le téléchargement. la vitesse de décompression et la vitesse de décompression sur le client.

Cloud CDN indique la méthode de compression choisie gzip ou brotli dans l'en-tête Content-Encoding de la réponse.

Cloud CDN détermine le niveau de compression pour équilibrer la taille totale de téléchargement et le coût du processeur sur le client. Des niveaux de compression plus élevés n'entraînent pas toujours de meilleures performances, en particulier sur les appareils mobiles à faible puissance.

Lorsque Cloud CDN compresse le contenu pour la première fois, il supprime le Content-Length de la réponse. cela est nécessaire pour permettre la réponse soit diffusée le plus rapidement possible, car l'intégralité du contenu la longueur est inconnue tant que l'intégralité de la réponse n'a pas été compressée. Une fois qu'une réponse a été compressée et mise en cache, Cloud CDN peut inclure l'en-tête Content-Length dans les réponses suivantes. (Pour HTTP/1.1 et les versions antérieures, Cloud CDN utilise Transfer-Encoding: chunked dans la réponse lorsqu'il n'utilise pas Content-Length.)

Quand une réponse est-elle compressée ?

Si une requête comporte un en-tête Accept-Encoding qui indique explicitement la compatibilité avec les algorithmes gzip ou Brotli, puis les réponses non compressées diffusées backend (origine) avec un en-tête Content-Type correspondant au Les types de contenu compressibles sont compressés avec gzip ou Brotli, en conséquence. Si une requête n'a pas d'en-tête Accept-Encoding ou si elle a Accept-Encoding: *, la réponse n'est pas compressée.

Par exemple, pour un en-tête Accept-Encoding dans une requête client, la réponse est compressé (ou non) selon les informations du tableau suivant:

En-tête de requête Accept-Encoding Encodage de réponse
gzip, compress, br Brotli (br)
deflate Non compressé
deflate, gzip gzip
identity Non compressé
* Non compressé

Types de contenus compressibles

La compression dynamique s'applique aux types MIME suivants, en fonction de l'en-tête de réponse HTTP Content-Type. Les réponses qui n'ont pas d'en-tête de réponse Content-Type ne sont pas compressées.

Les types de contenu courants et leurs types MIME sont les suivants :

  • Contenu HTML : text/html
  • Feuilles de style : text/css
  • JavaScript : application/javascript
  • JSON : application/json
  • Playlists HLS : application/x-mpegURL ou application/vnd.apple.mpegURL
  • Fichiers manifestes DASH : application/dash+xml

Le tableau suivant récapitule l'impact du type MIME sur la compression.

  Types MIME compressibles
Correspondance exacte application/x-javascript
application/x-sdch-dictionary
application/javascript
application/xml
application/csv
application/json
application/json+protobuf
application/signed-exchange
application/vnd.apple.mpegurl
application/wasm
application/x-plist
application/x-protobuffer
application/x-protobuf
application/x-nacl
application/x-pnacl
police/ttf
police/OTf
police/eot
image/svg+xml
image/trame pwg
image/x-icon
image/vnd.microsoft.icon
video/vnd.mpeg.dash.mpd
audio/mpegURL
application/dash+xml
application/vnd.ms-sstr+xml
Correspondance de format application/*+json
application/*+xml
application/*mpegURL
texte/*

Les formats d'image et de vidéo (tels que image/jpeg, image/png et video/mpeg4) sont presque toujours déjà compressés. Par conséquent, Cloud CDN ne les compresse pas. La recompression d'une réponse déjà compressée réduit rarement la taille du fichier, et les clients peuvent présenter un comportement inattendu lorsqu'ils reçoivent une réponse de ce type.

Quand une réponse n'est-elle pas compressée ?

La compression dynamique ne compresse pas une réponse présentant une ou plusieurs des caractéristiques suivantes :

  • Aucun en-tête Content-Type de la réponse ne correspond à un type de contenu compressible.
  • Elle n'a pas d'en-tête Content-Length.
  • Elle comporte un en-tête Content-Encoding.
  • La taille d'un fichier est inférieure à 1 Kio.

    Le temps passé à compresser et à décompresser est souvent compensé par les avantages offerts par ce service. Il y a aussi moins de contenu à compresser, ce qui peut réduire l'efficacité ce qui réduit le taux de compression.

  • Elle est supérieure à 10 Mio.

  • Elle comporte un en-tête Cache-Control: no-transform.

  • Elle comporte un en-tête Vary: Accept-Encoding.

Requêtes de plage

Lorsque Cloud CDN compresse une réponse, Cloud CDN Ajoute un en-tête Accept-Ranges: none et remplace tout Accept-Ranges existant headers. Les succès de cache (hit) de ces réponses ignorent les en-têtes Range.

Cela empêche la diffusion de contenu partiel incorrect aux clients, car il est impossible de savoir si un client attend une plage d'octets de la forme compressée ou non compressée d'une ressource.

ETags

Lorsque la compression dynamique compresse une réponse, tous les en-têtes ETag fortes sont affaiblies, conformément à la section 2.3 du document RFC 7232. Par exemple, ETag: "xyzzy" est remplacé par ETag: W/"xyzzy".

En-tête Vary

Lors de l'inférence d'une réponse pouvant être compressée (selon la requête), Cloud CDN ajoute l'en-tête Vary: Accept-Encoding au de réponse.

Résumé des modifications des réponses

Le tableau suivant récapitule les modifications apportées par Cloud CDN en-têtes d'une réponse en cas de compression:

En-tête de réponse Valeur d'en-tête après compression
Content-Encoding Définissez-la sur gzip ou brotli.
ETag Toute balise d'entité forte est remplacée par une version affaiblie. indiqué par le préfixe W/.
Accept-Ranges (Plages acceptées) Définissez la valeur sur none.
Contenu – Longueur Peut être complètement supprimé ou, le cas échéant, défini sur la longueur du contenu du corps compressé.
Transfert-encodage Pour HTTP/1.1 et les protocoles plus anciens, si Cloud CDN supprime Content-Length, elle ajoute cet en-tête et sa valeur est définie sur fragmentée et divise le corps de la réponse.

Journalisation

Les journaux Cloud CDN incluent un champ compressionStatus dans le jsonPayload indiquant si la réponse a été compressée par la charge et le type de compression.

{
  insertId: "1c02hw9g3gjay67"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
    statusDetails: "response_sent_by_backend"
    cacheId: "IAD-862d661f"
    compressionStatus: "br"
  }
}

Facturation

Lorsqu'une réponse est compressée par Cloud CDN ou Cloud Load Balancing, le transfert de données du cache sortant ou le transfert de données Internet sortantes approprié (respectivement) est mesurée par rapport aux derniers octets compressés envoyés au client.

Si vous diffusez une grande quantité de réponses compressibles, cela peut entraîner d'une réduction de vos frais mensuels de transfert de données sortantes, ainsi que d'une augmentation pour les utilisateurs finaux.

Métriques

Lorsque la compression est activée, la métrique https/response_bytes_count existante sous loadbalancing.googleapis.com indique la taille de la réponse compressée.

Vous pouvez vous attendre à une baisse du nombre total d'octets de réponse (et du transfert de données sortant) le débit).

Si vous diffusez une grande quantité de contenu textuel se compressant bien (par exemple, HTML, CSS, JavaScript ou JSON), vous risquez de constater une baisse importante du nombre d'octets de réponse.

Pour en savoir plus, consultez la section Surveillance.

Étape suivante