Considérations relatives à la compression de dictionnaire partagé basée sur zstd pour HTTP

Cet article présente les considérations d’entreprise relatives à la fonctionnalité ZSDCH (Shared Dictionary Compression for HTTP) basée sur zstd.

Les considérations relatives à l’infrastructure s’appliquent en grande partie à la fonctionnalité de transport du dictionnaire de compression qui a été implémentée par le projet Chromium. La fonctionnalité de transport de dictionnaire compressé est disponible pour les sites via le mécanisme d’évaluation d’Origine dans Microsoft Edge 119 et versions ultérieures.

Qu’est-ce que ZSDCH ?

ZSDCH est une fonctionnalité expérimentale de Microsoft Edge qui permet au navigateur d’utiliser un dictionnaire partagé pour décompresser les réponses servies via HTTPS. Lorsque les utilisateurs visitent un site (bing.com, par exemple) à l’aide de la fonctionnalité, ils bénéficient de performances améliorées grâce à des exigences de bande passante réduite pour que le serveur renvoie la page à l’utilisateur.

La fonctionnalité de transport du dictionnaire de compression cible les mêmes scénarios et fonctionne de la même manière.

Comment fonctionne ZSDCH ?

ZSDCH fonctionne en demandant au navigateur d’envoyer une nouvelle valeur, « zsdch », dans l’en-tête de requête « Accept-Encoding » pour indiquer au serveur que le navigateur prend en charge la compression ZSDCH.

Si le serveur souhaite utiliser ZSDCH pour les réponses futures, il fournit la réponse classique avec un encodage de contenu non-ZSDCH, mais avec un en-tête de réponse « get-dictionary » supplémentaire. Cet en-tête fournit un pointeur vers un emplacement où le navigateur peut extraire un dictionnaire ZSDCH en vue d’une utilisation ultérieure.

Une fois que le navigateur a extrait et mis en cache le dictionnaire, les demandes ultérieures adressées au serveur incluent une liste des dictionnaires disponibles dans un en-tête « avail-dictionary ». Si le serveur peut servir une réponse compressée à l’aide de l’un des dictionnaires disponibles, il fournit une réponse à l’aide du dictionnaire et spécifie un « Content-Encoding » de « zsdch ».

Comment fonctionne la fonctionnalité de transport du dictionnaire de compression ?

De même, lorsqu’un dictionnaire de transport de dictionnaire de compression est disponible sur le client pendant l’heure de la demande, le transport du dictionnaire de compression publie des valeurs d’en-tête de requête « Accept-Encoding » supplémentaires (« sbr » et/ou « zstd-d ») ainsi qu’un en-tête de requête « Sec-Available-Dictionary ».

Avec quels sites ces fonctionnalités sont-elles testées ?

Pour valider les gains de performances et la compatibilité avec différentes topologies de réseau, Edge publie la prise en charge de ZSDCH lors de la demande de contenu à partir de bing.com, bing.cn et msn.com. Edge prend également en charge les tests locaux en les publiant sur les serveurs avec le nom d’hôte « localhost ».

La fonctionnalité de transport du dictionnaire de compression est testée par différents sites, y compris des sites non-Microsoft, à l’aide du mécanisme d’essai d’Origin.

Interactions potentielles avec les middlebox réseau

Certaines entreprises utilisent des middlebox réseau qui offrent des fonctionnalités de mise en cache et/ou d’inspection du trafic réseau. Parfois, ces produits doivent être capables d’analyser la réponse ; sinon, ils peuvent modifier ou bloquer la réponse d’une manière qui interrompt la page.

Les middlebox qui nécessitent que Content-Encoding soit un encodage qu’il comprend doivent s’assurer qu’ils modifient la valeur d’en-tête Accept-Encoding des demandes pour supprimer les encodages non pris en charge. Sinon, le serveur web peut choisir d’offrir une réponse que la middlebox ne sera pas en mesure de décoder.

Pour la mise en cache des couches qui n’ont pas besoin d’inspecter la réponse, elles doivent également prendre en charge correctement l’en-tête « Vary » pour garantir qu’une réponse du serveur qui inclut les noms d’en-tête « avail-dictionary » et/ou « sec-available-dictionary » dans la valeur « Vary » est gérée correctement et que les réponses compressées ne sont pas retournées aux clients qui n’ont pas le dictionnaire approprié.

Ces pratiques sont génériques et s’appliquent également aux nouveaux encodages de contenu futurs pris en charge par les navigateurs.

Un proxy ou une middlebox ne peut interférer avec la compression sur une connexion TLS que s’il déchiffre le trafic TLS à l’aide d’un certificat d’interception privée.

Pour réduire le risque pour les environnements d’entreprise qui ne suivent pas les meilleures pratiques précédentes, Edge désactive la fonctionnalité ZDSCH lorsqu’une telle zone centrale de déchiffrement est détectée.

Pour la fonctionnalité de transport du dictionnaire de compression, une stratégie d’entreprise explicite (CompressionDictionaryTransportEnabled) est fournie. Les entreprises concernées peuvent utiliser la stratégie pour désactiver la fonctionnalité pendant qu’elles travaillent avec des fournisseurs pour mettre à jour leurs produits afin de gérer correctement les nouveaux encodages de contenu inconnus.

Vérification que ZSDCH est à l’origine d’un problème dans votre environnement

Si vous pensez que ZSDCH est à l’origine d’un problème indésirable dans votre environnement, vous pouvez désactiver ZSDCH dans Edge en procédant comme suit :

  1. Ouvrez edge://flags.
  2. Recherchez « #edge-enable-zsdch-content-encoding ».
  3. Définissez la valeur de la fonctionnalité sur « Désactivé ».
  4. Redémarrez Edge pour que la modification prenne effet.
  5. Exécutez le scénario qui a rencontré un problème pour déterminer s’il se produit toujours ou est résolu.