{"id":8010,"date":"2026-07-20T04:30:00","date_gmt":"2026-07-20T09:30:00","guid":{"rendered":"https:\/\/www.wpconsults.com\/?p=8010"},"modified":"2026-07-19T16:13:12","modified_gmt":"2026-07-19T21:13:12","slug":"verifier-si-le-cdn-met-en-cache","status":"publish","type":"post","link":"https:\/\/www.wpconsults.com\/fr\/check-if-cdn-is-caching\/","title":{"rendered":"Comment v\u00e9rifier si votre CDN met r\u00e9ellement vos pages en cache"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Votre tableau de bord CDN affiche un voyant vert, votre score de vitesse a augment\u00e9, vous en d\u00e9duisez donc que vos pages sont servies \u00e0 partir du cache. Or, ce n'est souvent pas le cas, et les outils de v\u00e9rification qui vous indiquent que \u201c votre CDN fonctionne \u201d ne font que confirmer que vos images sont mises en cache, ce qui n'a jamais \u00e9t\u00e9 la question.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce guide vous explique comment v\u00e9rifier si votre CDN met r\u00e9ellement vos pages en cache, et pas seulement vos ressources : l'en-t\u00eate \u00e0 surveiller, la signification de chaque valeur, et la marche \u00e0 suivre lorsque votre code HTML est discr\u00e8tement renvoy\u00e9 vers le serveur d'origine \u00e0 chaque requ\u00eate.<\/p>\n\n\n\n<div class=\"wp-block-group wpc-takeaways is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading toc-ignore\">Principaux enseignements<\/h2>\n<ul class=\"wp-block-list\">\n<li>Par d\u00e9faut, un CDN met en cache vos fichiers CSS, JS et vos images, mais pas vos pages HTML ; par cons\u00e9quent, le fait que \u201c mes ressources soient consult\u00e9es \u201d ne signifie pas que vos pages sont mises en cache.<\/li>\n<li>Lire l'en-t\u00eate de r\u00e9ponse \u00ab cache-status \u00bb (<code>cf-cache-status<\/code> sur Cloudflare) sur la PAGE elle-m\u00eame, avec <code>curl -I<\/code> ou dans l'onglet \u00ab R\u00e9seau \u00bb du navigateur : \u00ab HIT \u00bb signifie \u00ab cache \u00bb, tandis que \u00ab DYNAMIC \u00bb ou \u00ab BYPASS \u00bb indiquent que la requ\u00eate a \u00e9t\u00e9 dirig\u00e9e vers le serveur d'origine.<\/li>\n<li>\u00ab DYNAMIC \u00bb signifie que le CDN n'a jamais consid\u00e9r\u00e9 la page comme pouvant \u00eatre mise en cache ; \u00ab BYPASS \u00bb signifie qu'il l'aurait consid\u00e9r\u00e9e comme telle, mais qu'un cookie ou un <code>Cache-Control<\/code> L'en-t\u00eate l'a emp\u00each\u00e9.<\/li>\n<li>Le <code>\u00c2ge<\/code> Cet en-t\u00eate n'appara\u00eet que dans une r\u00e9ponse mise en cache et sa valeur augmente \u00e0 mesure que l'objet reste dans le cache ; c'est donc la preuve la plus \u00e9vidente qu'une page est bel et bien servie depuis la p\u00e9riph\u00e9rie.<\/li>\n<li>Sur une boutique WooCommerce, il faut \u00e9galement v\u00e9rifier le contraire : le panier, la page de paiement et la section \u00ab Mon compte \u00bb ne doivent PAS \u00eatre mis en cache, sinon la session d'un client sera servie au client suivant.<\/li>\n<\/ul>\n<\/div>\n\n\n<style>.kb-table-of-content-nav.kb-table-of-content-id3268_6ddb5a-74 .kb-table-of-content-wrap{padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-sm, 1.5rem);border-top:1px solid var(--global-palette10, #3182CE);border-right:1px solid var(--global-palette10, #3182CE);border-bottom:1px solid var(--global-palette10, #3182CE);border-left:1px solid var(--global-palette10, #3182CE);border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:15px 15px 0px 0px rgba(160, 152, 255, 0.31);}.kb-table-of-content-nav.kb-table-of-content-id3268_6ddb5a-74 .kb-table-of-contents-title-wrap{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id3268_6ddb5a-74 .kb-table-of-contents-title{font-weight:600;font-style:normal;}.kb-table-of-content-nav.kb-table-of-content-id3268_6ddb5a-74 .kb-table-of-content-wrap .kb-table-of-content-list{color:var(--global-palette4, #2D3748);font-weight:regular;font-style:normal;margin-top:var(--global-kb-spacing-sm, 1.5rem);margin-right:0px;margin-bottom:0px;margin-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id3268_6ddb5a-74 .kb-table-of-content-wrap .kb-table-of-content-list .kb-table-of-contents__entry:hover{color:var(--global-palette1, #3182CE);}.kb-table-of-content-nav.kb-table-of-content-id3268_6ddb5a-74 .kb-table-of-content-wrap .kb-table-of-content-list .active > .kb-table-of-contents__entry{color:var(--global-palette1, #3182CE);}@media all and (max-width: 1024px){.kb-table-of-content-nav.kb-table-of-content-id3268_6ddb5a-74 .kb-table-of-content-wrap{border-top:1px solid var(--global-palette10, #3182CE);border-right:1px solid var(--global-palette10, #3182CE);border-bottom:1px solid var(--global-palette10, #3182CE);border-left:1px solid var(--global-palette10, #3182CE);}}@media all and (max-width: 767px){.kb-table-of-content-nav.kb-table-of-content-id3268_6ddb5a-74 .kb-table-of-content-wrap{border-top:1px solid var(--global-palette10, #3182CE);border-right:1px solid var(--global-palette10, #3182CE);border-bottom:1px solid var(--global-palette10, #3182CE);border-left:1px solid var(--global-palette10, #3182CE);}}<\/style>\n\n\n<h2 class=\"wp-block-heading\">Comment v\u00e9rifier si votre CDN met r\u00e9ellement une page en cache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Demandez la page et consultez l'en-t\u00eate de r\u00e9ponse \u00ab cache-status \u00bb. Sur Cloudflare, cet en-t\u00eate est <code>cf-cache-status<\/code>: \u00ab HIT \u00bb signifie que la page provenait du cache du CDN, \u00ab MISS \u00bb ou \u00ab EXPIRED \u00bb signifie qu'elle a \u00e9t\u00e9 r\u00e9cup\u00e9r\u00e9e cette fois-ci sur votre serveur d'origine, et \u00ab DYNAMIC \u00bb ou \u00ab BYPASS \u00bb signifie que le CDN ne l'a pas du tout servie \u00e0 partir de son cache.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le moyen le plus rapide de le voir consiste \u00e0 ex\u00e9cuter une commande dans votre terminal :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -sI https:\/\/yoursite.com\/ | grep -i cf-cache-status<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le nom de l'en-t\u00eate varie selon le fournisseur (Fastly utilise <code>x-cache<\/code>, le cache du serveur LiteSpeed utilise <code>x-litespeed-cache<\/code>, KeyCDN et d'autres utilisent leur propre en-t\u00eate), mais le principe est le m\u00eame : il suffit de lire l'en-t\u00eate \u00ab cache-status \u00bb renvoy\u00e9 par votre pile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voici le hic, et la raison m\u00eame pour laquelle ce guide existe. Si vous effectuez ce m\u00eame test sur une image ou une feuille de style, vous obtiendrez presque toujours un r\u00e9sultat \u00ab HIT \u00bb, car les CDN les mettent en cache par d\u00e9faut. Ce r\u00e9sultat ne vous apprend donc rien sur vos pages. Donc <strong>Testez l'URL de la page, pas le logo.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pr\u00e9f\u00e9rez utiliser un navigateur ? Ouvrez la page, appuyez sur F12, allez dans l'onglet \u00ab R\u00e9seau \u00bb, actualisez la page, puis cliquez sur la toute premi\u00e8re requ\u00eate, qui correspond au document HTML lui-m\u00eame, et lisez <code>cf-cache-status<\/code> dans la section \u00ab En-t\u00eates de r\u00e9ponse \u00bb. Veillez simplement \u00e0 cliquer sur la ligne du document situ\u00e9e tout en haut et non sur une image ou un script situ\u00e9 en dessous, sinon vous devrez recommencer \u00e0 v\u00e9rifier les ressources.<\/p>\n\n\n\n<figure class=\"wpc-flow\">\n  <p class=\"wpc-flow__title\">La v\u00e9rification du cache en 30 secondes<\/p>\n  <ol class=\"wpc-flow__list\">\n    <li class=\"is-blue\">Ex\u00e9cutez la commande \u00ab curl -I \u00bb sur l'URL d'une v\u00e9ritable page (pas d'une image)<\/li>\n    <li class=\"is-teal\">Lire l'en-t\u00eate \u00ab cache-status \u00bb (cf-cache-status sur Cloudflare)<\/li>\n    <li class=\"is-purple\">\u00ab HIT \u00bb ou \u00ab REVALIDATED \u00bb signifie que la page provient du cache.<\/li>\n    <li class=\"is-red\">\u00ab DYNAMIC \u00bb ou \u00ab BYPASS \u00bb signifie que le trafic a \u00e9t\u00e9 achemin\u00e9 vers votre source \u00e0 chaque fois.<\/li>\n    <li class=\"is-green\">V\u00e9rifiez \u00e0 l'aide de l'en-t\u00eate \u00ab Age \u00bb, qui n'appara\u00eet que dans une r\u00e9ponse mise en cache<\/li>\n  <\/ol>\n  <figcaption class=\"wpc-flow__cap\">L'ensemble du contr\u00f4le se r\u00e9sume \u00e0 une requ\u00eate et un en-t\u00eate ; le reste consiste \u00e0 d\u00e9terminer ce que cette valeur signifie.<\/figcaption>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Pourquoi vos images sont mises en cache, mais pas vos pages HTML, en g\u00e9n\u00e9ral ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un CDN met en cache les fichiers statiques en fonction de leur extension et ne touche pas \u00e0 vos fichiers HTML. Dans <a href=\"https:\/\/developers.cloudflare.com\/cache\/concepts\/default-cache-behavior\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Selon les propres termes de Cloudflare<\/a>, \u201c Le CDN de Cloudflare ne met pas en cache les fichiers HTML ou JSON par d\u00e9faut. \u201d Sa liste par d\u00e9faut comprend les formats CSS, JS, JPG, PNG, WEBP, WOFF2, PDF et des dizaines d\u2019autres, mais pas <code>.html<\/code> et comme il n'y a rien qui redirige vers une page, vos pages sont redirig\u00e9es vers l'origine, sauf si vous ajoutez une r\u00e8gle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C'est pourquoi un \u201c v\u00e9rificateur de cache CDN \u201d peut donner le feu vert \u00e0 un site dont aucune page n'est mise en cache. L'outil r\u00e9cup\u00e8re une ressource, d\u00e9tecte un HIT et signale que l'op\u00e9ration a r\u00e9ussi. Pendant ce temps, vos pages r\u00e9elles, celles qui sont lentes et aliment\u00e9es par une base de donn\u00e9es, que vous souhaitiez voir mises en cache, <strong>vous revenez toujours \u00e0 votre point de d\u00e9part \u00e0 chaque visite.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez constater cette r\u00e9partition sur des sites r\u00e9els. Voici des extraits d'en-t\u00eates authentiques que j'ai analys\u00e9s sur trois sites publics, tous prot\u00e9g\u00e9s par Cloudflare :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ curl -sI https:\/\/kinsta.com\/ | grep -i cf-cache-status\ncf-cache-status : DYNAMIC\n\n$ curl -sI https:\/\/wpengine.com\/ | grep -i cf-cache-status\ncf-cache-status : DYNAMIC\n\n$ curl -sI https:\/\/yoast.com\/ | grep -iE 'cf-cache-status|age'\ncf-cache-status : HIT\nage : 22<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Deux d'entre eux diffusent leur code HTML de mani\u00e8re DYNAMIQUE, directement depuis la source, tandis que le troisi\u00e8me le met en cache en p\u00e9riph\u00e9rie gr\u00e2ce \u00e0 un v\u00e9ritable syst\u00e8me de mise en cache, dont l'utilisation ne cesse de cro\u00eetre <code>\u00c2ge<\/code>. M\u00eame CDN, r\u00e9sultats oppos\u00e9s, et la seule fa\u00e7on de savoir dans quel camp se trouve votre site est de consulter l'en-t\u00eate de votre propre page. (Captures r\u00e9elles, juillet 2026 ; sites publics, les en-t\u00eates sont accessibles \u00e0 tous.)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Signification de chaque valeur de \u00ab cf-cache-status \u00bb et mesures \u00e0 prendre en fonction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Voici tous les <code>cf-cache-status<\/code> la valeur, ce que Cloudflare explique qu'elle signifie, et la seule action qu'elle recommande. Les outils de v\u00e9rification vous indiquent la valeur ; la colonne \u00ab Action \u00bb est la partie qu'ils omettent.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Valeur<\/th><th>Ce que Cloudflare explique qu'il signifie<\/th><th>Que faire \u00e0 ce sujet ?<\/th><\/tr><\/thead><tbody>\n<tr><td><strong>HIT<\/strong><\/td><td>\u201c La ressource a \u00e9t\u00e9 trouv\u00e9e dans le cache de Cloudflare. \u201d<\/td><td>Fonctionne comme pr\u00e9vu. V\u00e9rifiez que l'\u00ab \u00c2ge \u00bb augmente bien, ce qui confirme qu'il s'agit d'un cache r\u00e9el et durable.<\/td><\/tr>\n<tr><td><strong>MISS<\/strong><\/td><td>\u201c La ressource n'a pas \u00e9t\u00e9 trouv\u00e9e dans le cache de Cloudflare et a \u00e9t\u00e9 fournie par le serveur web d'origine. \u201d<\/td><td>Normal lors de la premi\u00e8re consultation. Actualisez la page ; si le statut \u00ab HIT \u00bb n'appara\u00eet jamais, cela signifie que la page n'est pas mise en cache.<\/td><\/tr>\n<tr><td><strong>EXPIR\u00c9<\/strong><\/td><td>\u201c La ressource a \u00e9t\u00e9 trouv\u00e9e dans le cache de Cloudflare, mais son d\u00e9lai de validit\u00e9 \u00e9tait expir\u00e9 et elle a donc \u00e9t\u00e9 fournie depuis le serveur d'origine. \u201d<\/td><td>C'est acceptable avec mod\u00e9ration. Le message \u00ab EXPIRED \u00bb affich\u00e9 en permanence indique que la dur\u00e9e de vie (TTL) de la page est trop courte.<\/td><\/tr>\n<tr><td><strong>REVALID\u00c9<\/strong><\/td><td>La source a confirm\u00e9 que la copie mise en cache \u00e9tait inchang\u00e9e et qu'elle avait \u00e9t\u00e9 fournie \u00e0 partir du cache.<\/td><td>En cours. Le n\u0153ud p\u00e9riph\u00e9rique a v\u00e9rifi\u00e9 l'origine et a r\u00e9utilis\u00e9 la page mise en cache.<\/td><\/tr>\n<tr><td><strong>DYNAMIQUE<\/strong><\/td><td>\u201c Cloudflare ne consid\u00e8re pas que ce ressource puisse \u00eatre mise en cache et vos param\u00e8tres Cloudflare ne lui indiquent pas explicitement de le faire. \u201d<\/td><td>Param\u00e8tre par d\u00e9faut pour le HTML. Ajoutez une r\u00e8gle de mise en cache si vous souhaitez que cette page soit mise en cache.<\/td><\/tr>\n<tr><td><strong>BYPASS<\/strong><\/td><td>L'origine a demand\u00e9 \u00e0 Cloudflare de ne pas utiliser le cache via <code>Cache-Control<\/code>, ou bien la r\u00e9ponse a cr\u00e9\u00e9 un cookie.<\/td><td>Identifiez le cookie ou l'en-t\u00eate qui d\u00e9sactive la page ; corrigez le probl\u00e8me pour le panier et la connexion ; il s'agit d'un bug ailleurs.<\/td><\/tr>\n<tr><td><strong>P\u00c9RIM\u00c9<\/strong><\/td><td>Contenu fourni \u00e0 partir du cache alors qu'il \u00e9tait p\u00e9rim\u00e9, car Cloudflare n'a pas pu acc\u00e9der au serveur d'origine.<\/td><td>V\u00e9rifiez l'\u00e9tat de votre serveur d'origine ; le serveur p\u00e9riph\u00e9rique prend le relais d'un serveur qui n'a pas r\u00e9pondu.<\/td><\/tr>\n<tr><td><strong>MISE \u00c0 JOUR<\/strong><\/td><td>Le contenu a expir\u00e9, mais il est servi \u00e0 partir du cache pendant que le serveur d'origine le met \u00e0 jour en arri\u00e8re-plan.<\/td><td>Fonctionnement normal sous charge imm\u00e9diatement apr\u00e8s l'expiration. Aucune intervention n\u00e9cessaire.<\/td><\/tr>\n<tr><td><strong>AUCUN \/ INCONNU<\/strong><\/td><td>Cloudflare a g\u00e9n\u00e9r\u00e9 une r\u00e9ponse qui ne peut pas \u00eatre mise en cache (un Worker, une redirection, une r\u00e8gle WAF).<\/td><td>La requ\u00eate a re\u00e7u une r\u00e9ponse avant d'atteindre le cache ; c'est normal sur ces routes.<\/td><\/tr>\n<\/tbody><\/table><figcaption>Chaque valeur \u00ab cf-cache-status \u00bb est associ\u00e9e \u00e0 l'action unique qu'elle implique ; ainsi, une valeur affich\u00e9e sur votre page devient une d\u00e9cision, et non plus un simple libell\u00e9.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Un en-t\u00eate suppl\u00e9mentaire joue ici un r\u00f4le discret mais essentiel : <code>\u00c2ge<\/code>. Cloudflare ne le renvoie que \u201c pour les r\u00e9ponses servies \u00e0 partir du cache \u201d, et il comptabilise le nombre de secondes pendant lesquelles l'objet y est rest\u00e9, le compteur \u00e9tant remis \u00e0 z\u00e9ro en cas de purge ou de revalidation. Ainsi, un nombre croissant de <code>\u00c2ge<\/code> C'est la preuve la plus \u00e9vidente qu'une page provient bel et bien du serveur d'origine, et son absence sur une page que vous pensiez trouver en cache est le signe qu'il n'en est rien.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Que signifie \u00ab cf-cache-status DYNAMIC \u00bb et en quoi diff\u00e8re-t-il de \u00ab BYPASS \u00bb ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u201c DYNAMIC \u201d signifie que le CDN n\u2019a jamais consid\u00e9r\u00e9 la page comme pouvant \u00eatre mise en cache ; il l\u2019a donc r\u00e9cup\u00e9r\u00e9e depuis votre serveur d\u2019origine. Selon les termes de Cloudflare, la ressource n\u2019\u00e9tait \u00ab pas \u00e9ligible \u00e0 la mise en cache \u00bb et vos param\u00e8tres n\u2019indiquaient pas le contraire. Il s\u2019agit de l\u2019\u00e9tat par d\u00e9faut d\u2019une page HTML sans r\u00e8gle de mise en cache, ce qui explique pr\u00e9cis\u00e9ment pourquoi tant de personnes recherchent cette information : elles ont activ\u00e9 le CDN, ont vu la mention \u00ab DYNAMIC \u00bb sur chaque page et ont suppos\u00e9 qu\u2019il y avait un probl\u00e8me.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BYPASS, c'est une tout autre histoire. Cloudflare <em>serait<\/em> a mis la page en cache, mais votre serveur d'origine lui a express\u00e9ment demand\u00e9 de ne pas le faire, soit par le biais d'un <code>Cache-Control<\/code> en-t\u00eate d\u00e9fini sur <code>no-cache<\/code>, <code>priv\u00e9<\/code>ou <code>max-age=0<\/code>, ou parce que la r\u00e9ponse a cr\u00e9\u00e9 un cookie. Cloudflare ne mettra pas en cache une r\u00e9ponse contenant un <code>D\u00e9finir un cookie<\/code> en-t\u00eate, par conception.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C'est la diff\u00e9rence concr\u00e8te qui d\u00e9termine la solution \u00e0 adopter. <strong>DYNAMIC correspond \u00e0 un \u00e9cart de configuration :<\/strong> Vous n'avez tout simplement pas encore configur\u00e9 le CDN pour qu'il mette le code HTML en cache ; la solution consiste donc \u00e0 d\u00e9finir une r\u00e8gle de mise en cache. <strong>BYPASS est une option permettant de se d\u00e9sinscrire, disponible sur la page :<\/strong> Pour r\u00e9soudre le probl\u00e8me, il faut retrouver le cookie ou le <code>Cache-Control<\/code> C'est l'en-t\u00eate qui s'en charge. Sur une page normale, un cookie de session \u00e9gar\u00e9 est g\u00e9n\u00e9ralement en cause ; sur une page de panier ou de paiement, ce \u00ab BYPASS \u00bb est correct et il vaut mieux ne pas y toucher.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comment mettre votre code HTML en cache sur Cloudflare sans causer de probl\u00e8mes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour mettre en cache du contenu HTML, vous devez ajouter une r\u00e8gle de mise en cache qui marque les URL correspondantes comme \u201c \u00c9ligibles \u00e0 la mise en cache \u201d (l\u2019\u00e9quivalent ancien \u00e9tait une r\u00e8gle de page \u201c Tout mettre en cache \u201d). L\u2019erreur consiste \u00e0 l\u2019appliquer aveugl\u00e9ment \u00e0 l\u2019ensemble de votre site, car cela inclut les pages qui doivent rester sp\u00e9cifiques \u00e0 chaque utilisateur. Limitez la port\u00e9e de la r\u00e8gle aux pages pouvant \u00eatre mises en cache en toute s\u00e9curit\u00e9 et excluez les pages personnelles ; c\u2019est l\u00e0 que r\u00e9side le pi\u00e8ge de WooCommerce, abord\u00e9 dans la section suivante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il est \u00e9galement utile de conna\u00eetre les param\u00e8tres par d\u00e9faut de Cloudflare. Lorsque votre serveur d'origine n'envoie aucun <code>Cache-Control<\/code> ou <code>Date d'expiration<\/code> En ce qui concerne l'en-t\u00eate, Cloudflare met en cache les codes 200, 206 ou 301 pendant 120 minutes, les codes 302 ou 303 pendant 20 minutes, et les codes 404 ou 410 pendant seulement 3 minutes ; tout le reste n'est pas mis en cache. Ainsi, un cache de courte dur\u00e9e sur une page que vous pensiez voir rester en m\u00e9moire est souvent simplement d\u00fb au fait que le serveur d'origine ne r\u00e9pond pas et que Cloudflare revient alors \u00e0 la valeur par d\u00e9faut de deux heures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bon \u00e0 savoir : dans les formules Free, Pro et Business, que la plupart des utilisateurs de WordPress utilisent, Cloudflare respecte d\u00e9j\u00e0 les <code>Cache-Control<\/code> envoy\u00e9e par votre serveur d'origine. Ainsi, si vos pages ne sont pas mises en cache, l'en-t\u00eate de votre propre pile (ou de votre <a href=\"https:\/\/www.wpconsults.com\/fr\/cloudflare-supprime-lauto-minify-2\/\">Cache et couche d'optimisation WordPress<\/a>) est le premier \u00e9l\u00e9ment \u00e0 examiner, et <code>curl -I<\/code> \u00e7a te le met sous les yeux.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sur une boutique WooCommerce, v\u00e9rifiez que le panier et le processus de paiement ne sont PAS mis en cache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sur une boutique en ligne, vous v\u00e9rifiez simultan\u00e9ment deux \u00e9l\u00e9ments contradictoires : que les pages normales soient bien mises en cache (HIT), et que le panier, la page de paiement et la page \u00ab Mon compte \u00bb ne le soient PAS (BYPASS ou DYNAMIC). Une boutique o\u00f9 tout est mis en cache (HIT) pr\u00e9sente davantage de dysfonctionnements qu\u2019une boutique o\u00f9 rien ne l\u2019est, car une page de connexion mise en cache peut servir le panier et la session d\u2019un client directement au visiteur suivant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WooCommerce pr\u00e9cise clairement quelles pages doivent rester dynamiques. Conform\u00e9ment \u00e0 ses <a href=\"https:\/\/developer.woocommerce.com\/docs\/best-practices\/performance\/configuring-caching-plugins\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">propres recommandations en mati\u00e8re de mise en cache<\/a>, \u00e0 l'exception des pages \u201c Panier \u201d, \u00ab Paiement \u00bb et \u00ab Mon compte \u00bb, car \u00ab ces pages doivent rester dynamiques puisqu'elles affichent des informations sp\u00e9cifiques au client actuel et \u00e0 son panier \u00bb. Les cookies qui indiquent une session personnelle, et que votre cache ne doit en aucun cas mettre en cache, sont les suivants :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>woocommerce_cart_hash<\/code> et <code>woocommerce_items_in_cart<\/code>, qui indiquent \u00e0 WooCommerce quand le contenu du panier change.<\/li>\n<li><code>wp_woocommerce_session_<\/code>, qui associe chaque client aux donn\u00e9es de son panier dans la base de donn\u00e9es.<\/li>\n<li><code>woocommerce_recently_viewed<\/code>, qui alimente le widget \u00ab Produits r\u00e9cemment consult\u00e9s \u00bb.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Les bons plugins de mise en cache g\u00e8rent cela pour vous : WP Rocket exclut automatiquement ces trois pages lorsqu\u2019il d\u00e9tecte WooCommerce, et WooCommerce indique activement \u00e0 WP Super Cache d\u2019ignorer le panier, la page de paiement et \u201c Mon compte \u201d. Une r\u00e8gle personnalis\u00e9e de type \u00ab tout mettre en cache \u00bb d\u00e9finie au niveau du CDN ne tient pas compte de cette distinction, et c\u2019est l\u00e0 que r\u00e9side le danger.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La v\u00e9rification s'effectue \u00e0 l'aide d'une seule commande, qui cible les pages devant rester priv\u00e9es :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -sI https:\/\/yourstore.com\/cart\/ | grep -i cf-cache-status<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sur la page du panier, vous DEVEZ voir \u00ab BYPASS \u00bb ou \u00ab DYNAMIC \u00bb. Si le message \u00ab HIT \u00bb s'affiche, arr\u00eatez-vous imm\u00e9diatement et corrigez votre r\u00e8gle de cache avant qu'un client ne voie le panier d'un autre utilisateur. C'est <strong>le seul endroit o\u00f9 un \u00ab HIT \u00bb est synonyme d'\u00e9chec.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ce que montrent r\u00e9ellement les en-t\u00eates de notre propre site<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Voici un extrait tir\u00e9 de notre propre site, qui soul\u00e8ve un point pertinent. wpconsults.com n'utilise absolument pas Cloudflare en amont de son code HTML ; il utilise un cache de pages serveur LiteSpeed. L'en-t\u00eate \u00e0 consulter est donc le suivant : <code>x-litespeed-cache<\/code>, et non <code>cf-cache-status<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ curl -sI https:\/\/www.wpconsults.com\/ | grep -iE 'x-litespeed-cache|server'\nx-litespeed-cache : hit\nserver : LiteSpeed<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cela <code>coup<\/code> signifie que la page a \u00e9t\u00e9 servie \u00e0 partir du cache de pages du serveur lui-m\u00eame, et non \u00e0 partir d\u2019un n\u0153ud p\u00e9riph\u00e9rique du CDN ; cette distinction est importante, car les gens ont tendance \u00e0 confondre les deux. Un cache p\u00e9riph\u00e9rique de CDN (Cloudflare) stocke votre page dans des centres de donn\u00e9es situ\u00e9s \u00e0 proximit\u00e9 du visiteur. A <a href=\"https:\/\/www.wpconsults.com\/fr\/litespeed-cache-esi-settings-explained\/\">cache des pages serveur<\/a> (LiteSpeed, WP Rocket, WP Super Cache) stockent le code HTML g\u00e9n\u00e9r\u00e9 sur votre propre serveur d'origine afin que le PHP ne soit pas r\u00e9ex\u00e9cut\u00e9. Vous pouvez en utiliser un seul, les deux ou aucun ; chaque couche dispose de son propre en-t\u00eate d'\u00e9tat \u00e0 consulter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notre site est h\u00e9berg\u00e9 sur une plateforme bas\u00e9e sur LiteSpeed fournie par <a title=\"\" class=\"aalmanual\" target=\"_blank\"  rel=\"nofollow\"   href=\"https:\/\/www.wpconsults.com\/fr\/shared-hosting-hostinger\/\">Hostinger<\/a>, c'est pourquoi le cache de page se trouve sur le serveur et qu'il n'y a pas de <code>cf-cache-status<\/code> \u00e0 trouver. Dans les deux cas, les ressources statiques se comportent comme on peut s'y attendre :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ curl -sI https:\/\/www.wpconsults.com\/wp-content\/...\/style.css | grep -i cache-control\ncache-control : public, max-age=604800<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Un cache de navigateur vid\u00e9 depuis sept jours pour la feuille de style, pas de probl\u00e8me. C'est la r\u00e9partition habituelle : les ressources sont mises en cache et sans int\u00e9r\u00eat, ce sont les pages qu'il faut r\u00e9ellement v\u00e9rifier.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pourquoi votre taux de r\u00e9ussite du cache est inf\u00e9rieur \u00e0 ce que vous attendiez<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">M\u00eame lorsque la mise en cache HTML est activ\u00e9e, votre taux de r\u00e9ussite de mise en cache (la part des requ\u00eates servies \u00e0 partir du cache plut\u00f4t que de la source d\u2019origine) est g\u00e9n\u00e9ralement inf\u00e9rieur au chiffre affich\u00e9 en t\u00eate de tableau de bord. Ce chiffre est en grande partie constitu\u00e9 d\u2019\u00e9l\u00e9ments qui allaient de toute fa\u00e7on \u00eatre servis \u00e0 partir du cache, il vous donne donc une image plus flatteuse de la situation. Les pages qui comptent, \u00e0 savoir les pages dynamiques, ne repr\u00e9sentent qu\u2019une petite partie et sont les premi\u00e8res \u00e0 ne pas \u00eatre servies depuis le cache apr\u00e8s une purge ou un d\u00e9ploiement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9valuez donc la mise en cache en vous basant sur l'en-t\u00eate de vos principaux mod\u00e8les de page (page d'accueil, article, cat\u00e9gorie ou collection), et non sur un pourcentage global \u00e0 l'\u00e9chelle du site. Un pourcentage \u00e9lev\u00e9 pour les pages DYNAMIQUES signifie simplement que vos images assument la majeure partie de la charge, tandis que vos pages lentes continuent d'acc\u00e9der au serveur d'origine ; c'est \u00e9galement la raison pour laquelle l'\u00e9tat de la mise en cache appara\u00eet dans votre <a href=\"https:\/\/www.wpconsults.com\/fr\/comment-passer-les-epreuves-vitales-de-la-toile-de-fond-2\/\">Core Web Vitals et TTFB<\/a> bien avant qu'elle n'apparaisse dans un chiffre r\u00e9capitulatif.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Alors, est-ce que votre CDN met r\u00e9ellement vos pages en cache ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Honn\u00eatement, la plupart du temps, la r\u00e9ponse est \u201c pas comme vous le pensez \u201d. Le feu vert et l'indice de vitesse \u00e9valuent vos ressources, et celles-ci n'ont jamais \u00e9t\u00e9 le probl\u00e8me. Si c'\u00e9tait mon site, je passerais deux minutes \u00e0 lancer <code>curl -I<\/code> sur trois mod\u00e8les de page r\u00e9els : un article, une cat\u00e9gorie et le panier, avant de vous fier \u00e0 un tableau de bord, car l'en-t\u00eate ne vous met pas autant en valeur qu'un score.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Configurez la mise en cache HTML de mani\u00e8re r\u00e9fl\u00e9chie, excluez-en les pages sp\u00e9cifiques \u00e0 chaque utilisateur et v\u00e9rifiez \u00e0 nouveau l'en-t\u00eate chaque fois que vous modifiez une r\u00e8gle ou un plugin. L'objectif n'est pas d'avoir un CDN qui met tout en cache, ni un qui ne met rien en cache ; l'objectif est de savoir quelles pages sont mises en cache et de s'assurer que c'est bien le cas. Les outils vous indiquent que le CDN est activ\u00e9. Seulement <strong>l'en-t\u00eate de r\u00e9ponse vous indique que cela fonctionne,<\/strong> et, sur un site tr\u00e8s fr\u00e9quent\u00e9, c'est ce qui fait la diff\u00e9rence entre <a href=\"https:\/\/www.wpconsults.com\/fr\/un-site-wordpress-peut-il-gerer-1-million-de-visiteurs\/\">faire face \u00e0 un pic de trafic<\/a> et faire fondre ton origine sous son poids.<\/p>\n\n\n\n<div class=\"wp-block-group wpc-post-cta is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Vous ne savez toujours pas ce que vos en-t\u00eates vous indiquent ?<\/h3>\n<p class=\"wp-block-paragraph\">Si l'en-t\u00eate \u00ab cache-status \u00bb affiche une valeur que vous ne parvenez pas \u00e0 expliquer, ou si vos pages restent bloqu\u00e9es sur \u00ab DYNAMIC \u00bb et que vous ne comprenez pas pourquoi, <a href=\"https:\/\/www.wpconsults.com\/fr\/travailler-avec-wpconsults\/\">nous contacter<\/a> ou <a href=\"mailto:abdullah@wpconsults.com\">m'envoyer un courriel<\/a> et je vais y jeter un \u0153il. Il vaut la peine de bien s'assurer que vos pages soient servies \u00e0 partir du cache et que les bonnes pages n'y figurent pas.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>D\u00e9couvrez comment v\u00e9rifier si votre CDN met vos pages en cache, et pas seulement vos images : l'en-t\u00eate \u00ab cache-status \u00bb \u00e0 consulter, la signification de chaque valeur et la solution \u00e0 adopter lorsque votre code HTML est redirig\u00e9 vers le serveur d'origine.<\/p>","protected":false},"author":1,"featured_media":8012,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_kb_optimizer_status":0,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","rank_math_title":"How to Check If Your CDN Is Caching Your Pages","rank_math_description":"Your CDN dashboard says it works, but is it caching your pages? Learn how to check if your CDN is caching HTML with cf-cache-status, and fix it when it is not.","rank_math_focus_keyword":"check if your CDN is caching","_colophon_preset":"regular","_colophon_fc_on":"0","_colophon_edited_on":"0","_wpc_translation_mode":"keep","_wpc_translation_visited":"2026-07-20 09:34 UTC (backfill)","_wpc_keep_translation":false,"_wpc_lastmod":"","footnotes":""},"categories":[89],"tags":[],"class_list":["post-8010","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-seo"],"_links":{"self":[{"href":"https:\/\/www.wpconsults.com\/fr\/wp-json\/wp\/v2\/posts\/8010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wpconsults.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wpconsults.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wpconsults.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wpconsults.com\/fr\/wp-json\/wp\/v2\/comments?post=8010"}],"version-history":[{"count":0,"href":"https:\/\/www.wpconsults.com\/fr\/wp-json\/wp\/v2\/posts\/8010\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wpconsults.com\/fr\/wp-json\/wp\/v2\/media\/8012"}],"wp:attachment":[{"href":"https:\/\/www.wpconsults.com\/fr\/wp-json\/wp\/v2\/media?parent=8010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wpconsults.com\/fr\/wp-json\/wp\/v2\/categories?post=8010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wpconsults.com\/fr\/wp-json\/wp\/v2\/tags?post=8010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}