Qu’est-ce qu’un serveur de cache d’images ?
Un serveur de cache d’images stocke des images sources ou transformées déjà demandées à proximité des clients qui les utilisent. Les requêtes ultérieures peuvent utiliser la réponse stockée au lieu de récupérer la ressource à l’origine ou de répéter sa transformation.
Fonctionnement des serveurs de cache d’images
Un serveur de cache d’images associe l’identité d’une requête aux octets d’image et aux métadonnées de réponse stockés, puis sert le résultat sans répéter le travail en amont. Il peut mettre en cache les originaux, les versions redimensionnées ou les deux, sur un site périphérique régional ou au sein du service de transformation. Les règles de fraîcheur, les validateurs et l’invalidation explicite déterminent quand le contenu stocké est réutilisé. Cette couche se situe entre les URL d’images et le stockage d’origine, ce qui réduit la charge de transformation et raccourcit les chemins de diffusion.
Points clés
- Un service de transformation d’images met-il ses propres résultats en cache ? Pas nécessairement ; vérifiez donc ce point avant de supposer que les requêtes répétées sont peu coûteuses. La personne responsable de la maintenance d’imgproxy a indiqué que, par conception, le serveur open source n’effectue aucune mise en cache et laisse ce rôle aux CDN et aux serveurs de cache ; son édition Pro documente un cache interne facultatif et présente toujours le placement d’un CDN devant imgproxy comme la bonne pratique. Les transformations d’images de Cloudflare mettent chaque résultat transformé en cache en périphérie et mettent également l’original en cache pour accélérer les transformations ultérieures de la même source.
- Que doit contenir la clé de cache ? Tout ce qui modifie les octets : l’image source, chaque option de traitement et le format de sortie, éléments à partir desquels la clé du cache interne d’imgproxy est construite. Lorsque le format est choisi à partir de l’en-tête
Acceptde la requête plutôt que de l’URL, cette dernière n’identifie plus les octets. Un cache HTTP ne distingue alors les variantes que si la réponse mentionne cet en-tête dansVary, ou si le CDN ou le proxy de cache est configuré pour l’inclure dans sa clé. Les fonctionnalités des CDN prévues à cet effet sont soumises à conditions : Vary for Images de Cloudflare est proposé avec les forfaits Pro, Business et Enterprise et fonctionne uniquement lorsque l’origine envoieVary: Accept, que le chemin de l’URL de l’image comporte une extension de fichier prise en charge et que les variantes servies par l’origine sont configurées ; ses clés de cache personnalisées, qui peuvent inclureAccept, sont réservées au forfait Enterprise. imgproxy avertit que les en-têtes ne peuvent pas être signés ; un appelant peut donc contourner le cache du CDN en modifiantAccept. - Que se passe-t-il lorsqu’une image source est remplacée à la même URL ? Les caches continuent de servir les versions dérivées de l’ancienne image jusqu’à l’expiration ou à l’invalidation de ces entrées, et une purge n’atteint que les caches auxquels elle est envoyée. Attribuer une nouvelle URL à une source modifiée évite le problème, car aucune réponse n’est stockée pour une URL qui n’a jamais été demandée. Si le nom de fichier doit rester identique, l’URL de la version dérivée peut changer à la place : l’option
cachebusterd’imgproxy n’a aucun effet sur le traitement, et modifier sa valeur contourne les caches du CDN, du serveur proxy et du navigateur. Cela impose une nouvelle transformation, mais n’actualise pas la source : si l’original est lui aussi en cache sous son URL inchangée, la nouvelle version dérivée peut être créée à partir de l’ancien fichier jusqu’à l’expiration, à la revalidation ou à la purge de cette entrée. Cloudflare indique par exemple que les requêtes portant sur différentes tailles sont susceptibles de réutiliser son original en cache. Le cache interne d’imgproxy ne dispose pas d’invalidation manuelle ; sa clé inclutcachebuster, et sa documentation renvoie également à l’expiration des objets dans le système de stockage sous-jacent. - Que se passe-t-il lorsque de nombreuses requêtes ne trouvent pas simultanément la même image dans le cache ? À moins que le cache ne les regroupe, chacune déclenche sa propre transformation, un phénomène appelé ruée sur le cache. Le regroupement est soumis à conditions. Cloudflare regroupe les requêtes simultanées sans résultat en cache par centre de données ; plusieurs sites peuvent donc encore envoyer chacun une requête. La directive
proxy_cache_lockde NGINX est désactivée par défaut, et une requête dont l’attente dépasse le délai du verrou est transmise en amont sans que sa réponse soit mise en cache. Sur Fastly, si la réponse s’avère impossible à mettre en cache, les requêtes en attente sont envoyées à l’origine les unes après les autres.
Quand les serveurs de cache d’images sont utiles
Mettez en cache les variantes d’images coûteuses à produire avec des clés qui incluent chaque paramètre de transformation et la version pertinente de la source. Une clé incomplète peut conduire à servir la mauvaise image, tandis qu’une durée de conservation trop courte augmente la charge de l’origine et le coût du traitement.
Comment Transloadit aide à utiliser les serveurs de cache d’images
Dans le Smart CDN de Transloadit, le cache d’images est le Robot /tlcdn/deliver, utilisé implicitement pour les URL tlcdn.com : il met en cache chaque résultat transformé et le diffuse à proximité de vos utilisateurs. Le Robot /file/serve, qui transmet le résultat d’un Template au CDN, s’exécute uniquement lorsque le CDN ne dispose d’aucune copie en cache, et son paramètre cache_duration définit la durée pendant laquelle les navigateurs et les CDN peuvent conserver le résultat. La documentation relative à /file/serve déconseille d’utiliser ce Robot sans CDN en amont, car chaque requête entraînerait alors un nouveau redimensionnement.
Pour les URL signées du Smart CDN, la durée effective de mise en cache d’une réponse est limitée par la durée de validité restante de la signature. Les pages liées ici ne décrivent ni opération de purge ni comportement du résultat en cache lorsque l’original est remplacé sans changement de chemin de fichier ; testez donc ce cas sur votre propre Workspace avant de vous y fier.
Références
- RFC 9111 : mise en cache HTTP (clés de cache, Vary, requêtes regroupées, invalidation)
- imgproxy : cache interne, clé de cache et limites
- imgproxy : format des URL de traitement, notamment l’option cachebuster
- imgproxy : options de configuration (détection du format et avertissements concernant le cache)
- Ticket imgproxy 686 : mise en cache des images converties
- Cloudflare Images : mise en cache des transformations
- Cloudflare Images : fonctionnalités (mise en cache de l’image originale, purge)
- Cloudflare : diffusion de contenu adapté, notamment avec Vary for Images
- Cloudflare : Vary for images (disponibilité, extensions de fichier, limites)
- Cloudflare : comportement du cache par défaut, notamment le regroupement des requêtes
- NGINX ngx_http_proxy_module : proxy_cache_key et proxy_cache_lock
- Fastly : regroupement des requêtes et problème de ruée sur le cache