Contexte et enjeux
Depuis plusieurs années, le header Vary est considéré comme la partie la plus complexe du protocole HTTP, car il oblige les caches à différencier les réponses selon les valeurs d’en‑têtes de la requête. Jusqu’à présent, le réseau de distribution de Cloudflare traitait chaque réponse contenant Vary comme non cacheable, ce qui augmentait le nombre de requêtes vers l’origine et réduisait le taux de hit. L’article du blog indique que la société a « just shipped support for the ugliest part of HTTP: Vary », marquant l’ajout d’une prise en charge native dans son infrastructure CDN.
Mécanisme d’implémentation
Le support repose sur Pingora, le nouveau stack HTTP de Cloudflare, intégré dans la couche edge. Pingora analyse le champ Vary au moment de la réception de la réponse, extrait la liste des en‑têtes mentionnés (par ex. Accept-Encoding, User-Agent) et crée une clé de cache composite qui combine l’URL avec les valeurs de ces en‑têtes. Cette clé distincte permet de stocker plusieurs variantes d’une même ressource sans écraser les entrées précédentes. Cloudflare limite le nombre d’en‑têtes autorisés à trois et exclut les en‑têtes jugés trop volatils afin de contenir l’explosion du nombre d’objets en cache.
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding, User-Agent
Cache-Control: public, max-age=86400
Le code ci‑dessus montre une réponse typique que le nouveau système peut mettre en cache. Lorsqu’une requête arrive avec Accept-Encoding: gzip et un User-Agent spécifique, Pingora génère une entrée de cache distincte de celle d’une requête sans compression ou avec un autre agent.
Impacts sur les performances et limites
En autorisant le caching des réponses Vary, Cloudflare réduit le trafic vers les serveurs d’origine pour les contenus qui utilisent la négociation de contenu (ex. images WebP, réponses compressées). Les métriques internes publiées avec le lancement indiquent une amélioration du taux de hit de l’ordre de quelques points de pourcentage sur les sites qui déclarent Vary de façon exhaustive. Cependant, la fragmentation du cache entraîne une consommation supplémentaire de stockage edge, surtout lorsque les en‑têtes varient fréquemment. Cloudflare a donc introduit un mécanisme de purge automatique des variantes peu utilisées afin de limiter l’impact sur la capacité globale du réseau.
Le support reste limité aux en‑têtes explicitement listés dans le champ Vary. Les en‑têtes personnalisés ou ceux contenant des valeurs hautement dynamiques ne sont pas pris en compte, ce qui évite des scénarios où chaque requête créerait une nouvelle entrée. Les administrateurs peuvent désactiver la fonctionnalité via les règles de cache si le risque de fragmentation dépasse les bénéfices attendus.