{"id":19521,"date":"2026-05-30T15:02:41","date_gmt":"2026-05-30T13:02:41","guid":{"rendered":"https:\/\/webhosting.de\/http-conditional-requests-cache-validierung-optimierung-paket\/"},"modified":"2026-05-30T15:02:41","modified_gmt":"2026-05-30T13:02:41","slug":"http-conditional-requests-cache-validation-optimisation-paquet","status":"publish","type":"post","link":"https:\/\/webhosting.de\/fr\/http-conditional-requests-cache-validierung-optimierung-paket\/","title":{"rendered":"Comprendre les requ\u00eates conditionnelles HTTP et la validation du cache"},"content":{"rendered":"<p><strong>HTTP Conditionnel<\/strong> Les requ\u00eates r\u00e9duisent les co\u00fbts de transmission en permettant au client de ne charger compl\u00e8tement une ressource que si elle a vraiment \u00e9t\u00e9 modifi\u00e9e depuis la derni\u00e8re requ\u00eate. Je montre comment <strong>Validation du cache<\/strong> avec ETag, Last-Modified, If-None-Match, If-Modified-Since et 304 Not Modified fonctionne de mani\u00e8re fiable et que les temps de chargement diminuent sensiblement.<\/p>\n\n<h2>Points centraux<\/h2>\n\n<ul>\n  <li><strong>Validation<\/strong> au lieu du t\u00e9l\u00e9chargement complet : 304 permet d'\u00e9conomiser de la bande passante et du temps.<\/li>\n  <li><strong>ETag<\/strong> et Last-Modified travaillent ensemble pour un contr\u00f4le propre.<\/li>\n  <li><strong>Contr\u00f4le du cache<\/strong> d\u00e9finit la fra\u00eecheur, Expires ne fait que compl\u00e9ter.<\/li>\n  <li><strong>Pr\u00e9conditions<\/strong> comme If-Match s\u00e9curisent les \u00e9critures.<\/li>\n  <li><strong>S\u00e9curit\u00e9<\/strong> exige private\/no-store pour les contenus sensibles.<\/li>\n<\/ul>\n\n<h2>Ce que les demandes conditionnelles apportent au quotidien<\/h2>\n\n<p>Je mets <strong>Conditionnel<\/strong> Requests pour poser une question claire au serveur : Dois-je vraiment transmettre de nouvelles donn\u00e9es ou ma m\u00e9moire cache suffit-elle ? Le navigateur ou un proxy envoie des conditions, le serveur v\u00e9rifie si un fichier a \u00e9t\u00e9 modifi\u00e9 et r\u00e9pond en cas d'\u00e9galit\u00e9 par 304 Not Modified sans Body. Ce mod\u00e8le permet de maintenir \u00e0 jour le HTML, le CSS, le JavaScript, les images et les r\u00e9ponses API et de d\u00e9charger sensiblement l'infrastructure. Pour les assets valables plus longtemps, j'utilise des valeurs max-age longues et je m'assure de l'actualit\u00e9 par la validation. Ceux qui ont les bons <a href=\"https:\/\/webhosting.de\/fr\/http-controle-du-cache-strategies-hebergement-cachemaster\/\">Strat\u00e9gies de contr\u00f4le du cache<\/a> permet de tirer le meilleur parti des caches sans risquer de rendre le contenu obsol\u00e8te.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/httpcache-0614.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>En-t\u00eates permettant la validation de la m\u00e9moire cache<\/h2>\n\n<p>Pour des r\u00e9sultats fiables <strong>Cache<\/strong>-Pour prendre des d\u00e9cisions, le client a besoin de signaux clairs provenant de la r\u00e9ponse. J'utilise Cache-Control pour la fra\u00eecheur et les r\u00e8gles, Expires occasionnellement en compl\u00e9ment, ainsi que Last-Modified et ETag pour la validation proprement dite. Last-Modified fournit une date de modification qui peut \u00eatre rapidement v\u00e9rifi\u00e9e, tandis qu'ETag fournit un identifiant de version qui porte \u00e9galement sur les contenus dynamiques. Il est important de noter que no-cache signifie valider avant utilisation et non pas supprimer. Celui qui applique proprement cette s\u00e9mantique obtient une r\u00e9duction sensible du trafic de donn\u00e9es pour la m\u00eame actualit\u00e9 des donn\u00e9es. <strong>Contenu<\/strong>.<\/p>\n\n<h2>D\u00e9roulement d'une requ\u00eate conditionnelle sans d\u00e9tours<\/h2>\n\n<p>Lors du premier appel, le client enregistre le fichier et les valeurs de validation telles que <strong>ETag<\/strong> ou Last-Modified dans le cache. Plus tard, la ressource expire ou demande une nouvelle v\u00e9rification avant d'\u00eatre utilis\u00e9e, et le client envoie \u00e9galement If-None-Match ou If-Modified-Since. Le serveur compare les donn\u00e9es avec l'\u00e9tat actuel et renvoie soit 200 OK avec un nouveau corps, soit 304 Not Modified sans charge utile. Le client r\u00e9utilise alors la copie existante et \u00e9conomise la transmission, la charge de travail TLS et le temps. Ce ping-pong para\u00eet anodin, mais la <strong>Effet<\/strong> sur la sensation de chargement et la charge du serveur est \u00e9vidente.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/http_requests_besprechung_4827.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>ETag vs. Last-Modified en comparaison directe<\/h2>\n\n<p>J'utilise <strong>Derni\u00e8re modification<\/strong> comme une indication rapide et simple, mais je pr\u00e9f\u00e8re utiliser des ETags pour un contr\u00f4le plus d\u00e9taill\u00e9. L'horodatage peut se heurter \u00e0 des limites lorsque les intervalles de modification sont tr\u00e8s courts ou peut fausser les sorties dynamiques. Je cr\u00e9e des ETags \u00e0 partir de hachages de fichiers, de versions de bases de donn\u00e9es ou de variantes de rendu, ce qui permet de g\u00e9n\u00e9rer un nouvel identifiant \u00e0 chaque modification de contenu. Les deux m\u00e9canismes peuvent \u00eatre combin\u00e9s : Le client peut envoyer en parall\u00e8le If-None-Match et If-Modified-Since, et le serveur choisit la v\u00e9rification appropri\u00e9e. Comment assurer une fiabilit\u00e9 <strong>Validation<\/strong>, Le syst\u00e8me de gestion des ressources de l'UE, qui s'applique aussi bien aux ressources statiques qu'aux ressources dynamiques.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Crit\u00e8re<\/th>\n      <th>Derni\u00e8re modification<\/th>\n      <th>ETag<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><strong>Pr\u00e9cision<\/strong><\/td>\n      <td>R\u00e9solution en secondes, adapt\u00e9e aux fichiers<\/td>\n      <td>Identification de la version pour chaque modification de contenu<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Dynamique<\/strong><\/td>\n      <td>Faible en cas de modifications fr\u00e9quentes non bas\u00e9es sur des fichiers<\/td>\n      <td>Fort pour les API et les contenus rendus<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Charges<\/strong><\/td>\n      <td>Faible, disponible \u00e0 partir du syst\u00e8me de fichiers<\/td>\n      <td>Faible \u00e0 mod\u00e9r\u00e9, g\u00e9n\u00e9ration dans App\/Proxy<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Conflits<\/strong><\/td>\n      <td>Diff\u00e9rences de montres possibles<\/td>\n      <td>Possibilit\u00e9 de tags Weak\/Strong mal configur\u00e9s<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Param\u00e8tres corrects pour la mise en cache du navigateur et les API<\/h2>\n\n<p>Pour les actifs statiques, j'utilise de longues <strong>max-age<\/strong> et je s\u00e9curise par ETag ou par hachage du nom de fichier afin que les mises \u00e0 jour soient imm\u00e9diatement reconnues. Je marque souvent les r\u00e9ponses HTML et API avec no-cache, afin que le client valide avant l'utilisation sans devoir tout recharger \u00e0 chaque fois. Je marque les pages personnalis\u00e9es avec private, afin que les caches partag\u00e9s ne transmettent rien de retenu aux autres. Les erreurs sont souvent dues \u00e0 des directives contradictoires ou \u00e0 des en-t\u00eates de validation manquants, ce que j'\u00e9vite avec des r\u00e8gles claires. Si l'on conna\u00eet les \u00e9cueils typiques, on les contourne facilement ; l'article sur les <a href=\"https:\/\/webhosting.de\/fr\/http-cache-headers-saboter-la-mise-en-cache-cachefix\/\">Les pi\u00e8ges des en-t\u00eates dans la mise en cache<\/a>, J'aime m'en inspirer.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/http-conditional-cache-validation-3847.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Utiliser efficacement les codes d'\u00e9tat et les conditions<\/h2>\n\n<p>Je classe <strong>Codes d'\u00e9tat<\/strong> 200 OK fournit le contenu, 304 Not Modified confirme l'utilisation du cache et 412 Precondition Failed s'interrompt si une condition n'est pas remplie. Pour les op\u00e9rations d'\u00e9criture s\u00e9curis\u00e9es, j'utilise If-Match pour que les mises \u00e0 jour n'interviennent que si l'ETag correspond \u00e0 la version attendue. La lecture avec If-None-Match ou If-Modified-Since \u00e9vite les charges utiles superflues et maintient les clients synchronis\u00e9s. Il est important d'adopter un comportement coh\u00e9rent : Le m\u00eame point final devrait r\u00e9pondre de mani\u00e8re identique pour des conditions pr\u00e9alables identiques. Pour le SEO et les bots, je fais attention \u00e0 la mani\u00e8re dont les caches et les crawlers interpr\u00e8tent les messages d'\u00e9tat ; un bon aper\u00e7u de <a href=\"https:\/\/webhosting.de\/fr\/codes-detat-http-exploration-hebergement-optimisation-crawlboost\/\">Codes d'\u00e9tat HTTP et crawling<\/a> aide \u00e0 prendre des d\u00e9cisions propres.<\/p>\n\n<h2>S\u00e9curit\u00e9 et confidentialit\u00e9 de la mise en cache<\/h2>\n\n<p>Je traite les contenus sensibles avec <strong>no-store<\/strong> et ne leur donne ainsi aucune chance de se retrouver dans le cache du navigateur ou du proxy. Je signale les pages personnalis\u00e9es avec Cache-Control : private et je v\u00e9rifie qu'aucune donn\u00e9e personnelle n'appara\u00eet dans les URL mises en cache \u00e0 long terme. Je con\u00e7ois les balises ET de mani\u00e8re neutre, sans permettre d'identifier les comptes d'utilisateurs ou les identifiants internes. Je d\u00e9sactive syst\u00e9matiquement tout stockage interm\u00e9diaire pour les vues de connexion et les flux bancaires. En combinant la minimisation des donn\u00e9es, des directives appropri\u00e9es et des en-t\u00eates propres, on r\u00e9duit les risques et on pr\u00e9serve la s\u00e9curit\u00e9. <strong>Confidentialit\u00e9<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/http_cache_validierung_6789.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Mise en \u0153uvre : \u00e9tapes pour le serveur et l'application<\/h2>\n\n<p>Au d\u00e9but, je s\u00e9pare <strong>statique<\/strong> de ressources dynamiques et d\u00e9cide o\u00f9 les longs d\u00e9lais sont utiles et o\u00f9 la validation est prioritaire. Dans Nginx, Apache ou un serveur d'applications, je configure le contr\u00f4le du cache et j'active le Last-Modified ainsi que les ETags, en confiant la g\u00e9n\u00e9ration des ETags \u00e0 l'application pour les points de terminaison dynamiques. Lors du traitement des requ\u00eates entrantes, j'\u00e9value If-None-Match et If-Modified-Since et r\u00e9ponds par 304 si la condition est remplie. Pour les op\u00e9rations d'\u00e9criture, j'utilise If-Match et renvoie 412 en cas d'\u00e9cart afin d'\u00e9viter les \u00e9crasements. Il en r\u00e9sulte un comportement coh\u00e9rent qui utilise efficacement les caches et qui, en m\u00eame temps <strong>Correction<\/strong> de l'entreprise.<\/p>\n\n<h2>Utiliser judicieusement les m\u00e9triques, les tests et le monitoring<\/h2>\n\n<p>Je v\u00e9rifie dans le <strong>R\u00e9seau<\/strong>-Je v\u00e9rifie dans l'onglet DevTools si les ressources sortent du cache, sont valid\u00e9es ou fra\u00eechement charg\u00e9es. J'observe l'\u00e9tat, les valeurs d'\u00e2ge, les balises ET et la taille de la r\u00e9ponse transmise. Sous charge, je mesure la latence, le volume de transfert et l'unit\u00e9 centrale du serveur afin de voir l'effet r\u00e9el des r\u00e9ponses 304. Les journaux du reverse proxy montrent si les caches partag\u00e9s jouent leur r\u00f4le et combien de validations ont r\u00e9ussi. Avec ces donn\u00e9es, j'ajuste le max-age, les directives de contr\u00f4le du cache et les strat\u00e9gies d'ETag jusqu'\u00e0 ce que les temps de r\u00e9ponse et les performances des serveurs soient optimis\u00e9s. <strong>Taux de r\u00e9ussite<\/strong> voter.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/EntwicklerdeskCache3178.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Performance de l'h\u00e9bergement : pourquoi les requ\u00eates conditionnelles permettent d'\u00e9conomiser de l'argent<\/h2>\n\n<p>Tout <strong>304<\/strong>-La r\u00e9ponse en cache permet d'\u00e9conomiser de la bande passante, de r\u00e9duire l'overhead TLS et de raccourcir le temps de r\u00e9ponse, ce qui est particuli\u00e8rement important en cas de nombreuses demandes similaires. Dans les configurations d'h\u00e9bergement avec proxys invers\u00e9s, load balancers et CDN, je d\u00e9ploie le plus grand effet si j'autorise clairement les caches partag\u00e9s ou si je les exclue de mani\u00e8re cibl\u00e9e. Moins de transfert signifie souvent aussi moins de co\u00fbts de trafic en euros et plus de r\u00e9serves pour les v\u00e9ritables pics de charge. En outre, l'exp\u00e9rience utilisateur s'am\u00e9liore car les appels de page r\u00e9p\u00e9t\u00e9s et les API polls r\u00e9agissent plus rapidement. J'exploite ainsi le potentiel de performance que les seules mises \u00e0 niveau mat\u00e9rielles ne peuvent fournir, et j'utilise les ressources existantes. <strong>Infrastructure<\/strong> mieux<\/p>\n\n<h2>Erreurs fr\u00e9quentes et solutions pragmatiques<\/h2>\n\n<p>contradictoire <strong>En-t\u00eate<\/strong> comme no-cache, associ\u00e9es \u00e0 des dates d'expiration tr\u00e8s \u00e9loign\u00e9es dans le temps, embrouillent les caches ; je d\u00e9finis des r\u00e8gles claires sans doublons. Les ETags manquants pour les points de terminaison dynamiques entra\u00eenent des t\u00e9l\u00e9chargements complets inutiles ; j'ajoute un identifiant fiable et j'\u00e9value le match if-none. Des valeurs max-age trop courtes gaspillent le potentiel des fichiers rarement modifi\u00e9s ; j'\u00e9tire les d\u00e9lais et les s\u00e9curise malgr\u00e9 tout avec une validation. Une mise en cache agressive du HTML retarde les modifications visibles ; je combine no-cache avec ETag et maintiens les contenus \u00e0 jour. En prenant des d\u00e9cisions claires en mati\u00e8re de fra\u00eecheur, de validation et de validit\u00e9, je r\u00e9sous ces \u00e9cueils et renforce les <strong>Planification<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/cache-validierung-5836.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Utiliser Vary proprement et contr\u00f4ler les repr\u00e9sentations<\/h2>\n\n<p>Pour que les requ\u00eates conditionnelles fonctionnent en toute s\u00e9curit\u00e9 dans les caches partag\u00e9s, je veille \u00e0 ce que l'utilisation de <strong>Vary<\/strong>. L'en-t\u00eate d\u00e9finit les en-t\u00eates de requ\u00eate qui influencent la repr\u00e9sentation. Des exemples typiques sont <em>Accept-Encoding<\/em> (gzip, br), <em>Accepter la langue<\/em> et <em>Accept<\/em>. Lorsque je fournis un contenu par langue, je d\u00e9finis Vary : Accept-Language pour \u00e9viter qu'un proxy ne partage la version allemande en r\u00e9ponse \u00e0 une requ\u00eate fran\u00e7aise. Pour les contenus personnalis\u00e9s, je renonce d\u00e9lib\u00e9r\u00e9ment \u00e0 Vary : Cookie et j'utilise \u00e0 la place <em>Contr\u00f4le du cache : private<\/em>, Je ne veux pas d'une explosion incontr\u00f4lable des cl\u00e9s de cache. Pour les ressources qui ne sont livr\u00e9es qu'avec une autorisation valable, j'utilise soit private, soit j'assure une s\u00e9paration claire avec Vary : Authorization ou Vary sur les en-t\u00eates pertinents. La coh\u00e9rence est importante : le jeu de dimensions Vary choisi doit rester stable, sinon le taux d'utilisation du cache et les avantages de la validation s'effondrent parce que de nouvelles variantes sont constamment cr\u00e9\u00e9es.<\/p>\n\n<h2>ETags forts vs. faibles, compression et \u00e9galit\u00e9 des octets<\/h2>\n\n<p><strong>ETags forts<\/strong> caract\u00e9risent des repr\u00e9sentations identiques octet par octet et permettent une validation pr\u00e9cise, \u00e9galement en combinaison avec des Range Requests. <strong>ETags faibles<\/strong> (W\/...) signalent uniquement l'\u00e9galit\u00e9 de contenu, pas n\u00e9cessairement des octets identiques. Dans la pratique, j'utilise des ETags forts lorsque je peux g\u00e9n\u00e9rer un identifiant unique par repr\u00e9sentation (y compris la compression). D\u00e8s qu'un reverse proxy utilise gzip ou brotli \u00e0 la vol\u00e9e, j'adapte la g\u00e9n\u00e9ration d'ETags ou je passe \u00e0 des ETags faibles, afin que le serveur et le client ne consid\u00e8rent pas \u00e0 tort des octets diff\u00e9rents comme identiques. Une variante robuste consiste \u00e0 g\u00e9n\u00e9rer l'ETag \u00e0 partir des octets finaux de la r\u00e9ponse livr\u00e9e et, en m\u00eame temps <em>Vary : Accept-encodage<\/em> pour chaque fichier. Cela permet de garantir que \u201egzip\u201c et \u201ebr\u201c re\u00e7oivent chacun leur propre balise valide. Lorsque je ne peux pas garantir l'\u00e9galit\u00e9 des octets (par exemple des horodatages diff\u00e9rents dans le HTML), je choisis des balises ET faibles qui permettent malgr\u00e9 tout d'obtenir des r\u00e9ponses 304 fiables, tant que la signification de la page n'a pas chang\u00e9.<\/p>\n\n<h2>Contr\u00f4le du cache en r\u00e9glage fin : s-maxage, must-revalidate, stale-while-revalidate<\/h2>\n\n<p>En plus de <em>max-age<\/em> j'utilise de mani\u00e8re cibl\u00e9e des directives plus fines. <strong>s-maxage<\/strong> s'adresse exclusivement <em>Caches partag\u00e9s<\/em> (CDN, proxies) et me permet d'y mettre en cache de mani\u00e8re plus agressive que dans le navigateur. <strong>must-revalidate<\/strong> oblige les clients \u00e0 ne pas utiliser les contenus expir\u00e9s de mani\u00e8re heuristique, mais \u00e0 toujours les valider - ce qui est utile pour les donn\u00e9es critiques. <strong>proxy-revalidate<\/strong> adresse cette obligation sp\u00e9cifiquement aux caches partag\u00e9s. Avec <strong>stale-while-revalidate<\/strong> je permets de livrer bri\u00e8vement une copie l\u00e9g\u00e8rement obsol\u00e8te pendant que la validation est en cours en arri\u00e8re-plan ; les utilisateurs voient imm\u00e9diatement quelque chose et la demande suivante b\u00e9n\u00e9ficie de m\u00e9tadonn\u00e9es fra\u00eeches. <strong>stale-if-error<\/strong> je le tiens \u00e0 disposition comme filet de s\u00e9curit\u00e9 : Si Origin tombe en panne ou fournit des erreurs, le cache peut fournir la derni\u00e8re copie connue pendant une dur\u00e9e d\u00e9finie. Pour les actifs hach\u00e9s \u00e0 la construction, je combine max-age long avec <em>immuable<\/em>, car le nom de fichier change avec le contenu et les validations interm\u00e9diaires sont inutiles. Pour le HTML et les API, le no-cache plus le validateur reste l'\u00e9talon-or pour garantir l'actualit\u00e9 tout en \u00e9conomisant de la bande passante.<\/p>\n\n<h2>Autres conditions et m\u00e9thodes : HEAD, Range et conflits d'\u00e9criture<\/h2>\n\n<p>Les requ\u00eates conditionnelles ne se limitent pas \u00e0 GET. Un <strong>HEAD<\/strong>-Request ne fournit que des en-t\u00eates et convient parfaitement aux validations rapides sans corps. Pour les gros fichiers, je mets <strong>gamme<\/strong>-avec <strong>If-Range<\/strong> je m'assure que les sous-domaines ne sont envoy\u00e9s que si la ressource correspond toujours \u00e0 la version attendue - sinon je r\u00e9ponds avec 200 et le corps complet. Pour les op\u00e9rations d'\u00e9criture, j'assure la coh\u00e9rence avec <strong>If-Match<\/strong> ab : PUT, PATCH ou DELETE n'ont d'effet que si l'ETag du client correspond \u00e0 la version actuelle ; sinon, je r\u00e9ponds avec 412 Precondition Failed. L\u00e0 o\u00f9 je veux forcer des pr\u00e9-conditions, par exemple pour des ressources sujettes \u00e0 des conflits, j'utilise 428 Precondition Required pour inciter les clients \u00e0 utiliser If-Match. Je choisis d\u00e9lib\u00e9r\u00e9ment entre 409 Conflict et 412 : 412 signale les pr\u00e9conditions viol\u00e9es, 409 souligne les conflits de contenu (par exemple les r\u00e8gles de la logique commerciale). Cette clart\u00e9 facilite les impl\u00e9mentations de clients et \u00e9vite les \u00e9crasements aveugles.<\/p>\n\n<h2>Personnalisation, cookies et protection des donn\u00e9es dans la pratique<\/h2>\n\n<p>Pour les pages personnalis\u00e9es, je marque les r\u00e9ponses avec <strong>priv\u00e9<\/strong> ou <strong>no-store<\/strong>. J'\u00e9vite de coder les \u00e9tats des utilisateurs dans des ETags, car de tels ETags \u201eper-user\u201c peuvent devenir involontairement des marqueurs de suivi. Au lieu de cela, je fais une distinction stricte entre les repr\u00e9sentations publiques et priv\u00e9es. Je ne place des cookies dans la cl\u00e9 de cache (Vary : cookie) que si c'est absolument n\u00e9cessaire, car ils augmentent la diversit\u00e9 des variantes et r\u00e9duisent dramatiquement le taux de r\u00e9ussite. Pour les r\u00e9ponses API autoris\u00e9es, je m'en tiens aux r\u00e8gles suivantes <em>Contr\u00f4le du cache : private<\/em> et, si n\u00e9cessaire, \u00e0 Vary sur le format d'en-t\u00eate Authorization. Je m'assure ainsi que les caches partag\u00e9s ne partagent pas par inadvertance des r\u00e9ponses confidentielles. Dans les applications \u00e0 contenu mixte (base publique, sous-parties personnalis\u00e9es), j'utilise une mise en cache fragment\u00e9e ou Edge-ESI\/SSI, tandis que les parties critiques restent priv\u00e9es. Le r\u00e9sultat est une protection des donn\u00e9es sans baisse de performance.<\/p>\n\n<h2>Exploitation : CDN, substituts et invalidations<\/h2>\n\n<p>Dans les configurations CDN, je combine <strong>s-maxage<\/strong> avec des validateurs clairs et utilise - si disponible - des directives sp\u00e9cifiques au surrogate pour contr\u00f4ler les caches Edge s\u00e9par\u00e9ment du navigateur. La revalidation r\u00e9duit la charge \u00e0 l'origine, mais une invalidation s\u00e9v\u00e8re est parfois n\u00e9cessaire (par ex. correction de s\u00e9curit\u00e9). Je pr\u00e9vois alors deux m\u00e9thodes : <em>Cache-busting<\/em> sur les hachages de noms de fichiers pour les actifs statiques et <em>Purge<\/em>\/invalidation pour le HTML et les API. J'\u00e9vite ainsi les \u201etemp\u00eates de purge\u201c tout en maintenant un temps de r\u00e9ponse court. Il est \u00e9galement important d'avoir une cl\u00e9 de cache coh\u00e9rente dans le CDN (y compris l'h\u00f4te, le chemin, les param\u00e8tres de requ\u00eate et les en-t\u00eates Vary pertinents). Pour les param\u00e8tres de requ\u00eate, je fais sciemment la distinction entre les param\u00e8tres s\u00e9mantiques (par ex. ?lang=) et les param\u00e8tres de suivi ; j'ignore ces derniers dans la cl\u00e9 de cache afin d'\u00e9viter la fragmentation. Ainsi, la cha\u00eene du cache du navigateur, du proxy interm\u00e9diaire et du CDN reste transparente et pr\u00e9visible.<\/p>\n\n<h2>304 en d\u00e9tail : Mettre \u00e0 jour correctement les en-t\u00eates et les m\u00e9tadonn\u00e9es<\/h2>\n\n<p>Il y a aussi une <strong>304<\/strong>-La r\u00e9ponse porte des m\u00e9tadonn\u00e9es importantes. Je retransmets Date, Cache-Control, ETag\/Last-Modified et - si pertinent - Expires et Vary, afin que le client puisse mettre \u00e0 jour ses entr\u00e9es de cache. Le type de contenu et l'encodage du contenu ne doivent pas n\u00e9cessairement \u00eatre r\u00e9p\u00e9t\u00e9s, mais peuvent contribuer \u00e0 la clart\u00e9. Il est important que 304 ne contienne pas de charge utile de corps et que j'envoie des validateurs coh\u00e9rents : Un changement d'ETag dans la 304 sans modification de la repr\u00e9sentation entra\u00eene une confusion. Si des directives sont adapt\u00e9es (par ex. max-age plus long), le client peut reprendre les m\u00e9tadonn\u00e9es sans devoir recharger le body - un petit levier avec un grand effet sur la performance per\u00e7ue.<\/p>\n\n<h2>Strat\u00e9gies de test et de d\u00e9bogage pour une validation propre<\/h2>\n\n<p>Dans les DevTools, je contr\u00f4le de mani\u00e8re cibl\u00e9e les points suivants : <em>\u00e0 partir du cache disque<\/em> vs. <em>de la m\u00e9moire cache<\/em> vs. <em>revalidated<\/em>; l'\u00e9tat 200\/304 ; les en-t\u00eates Age dans les r\u00e9ponses des caches partag\u00e9s ; la coh\u00e9rence ETag\/dernier modifi\u00e9 ainsi que l'effet de Vary. Pour des tests reproductibles, je d\u00e9sactive temporairement le cache du navigateur ou j'utilise un mode priv\u00e9. Du c\u00f4t\u00e9 du serveur, j'\u00e9value les logs concernant le rapport 200\/304, la taille moyenne des r\u00e9ponses et l'utilisation du CPU. Les signaux d'alarme sont par exemple un grand nombre de r\u00e9ponses 200 pour des ressources avec des intervalles de modification courts (validateurs manquants), des boucles de revalidation (temps divergents\/d\u00e9rive d'horloge) ou un nombre inhabituel de variantes par URL (vary excessif). Gr\u00e2ce aux tests de charge, je v\u00e9rifie comment s-maxage, stale-while-revalidate et If-None-Match se comportent sous pression - et j'ajuste les directives jusqu'\u00e0 ce que le d\u00e9bit et la latence soient compatibles.<\/p>\n\n<h2>Edge Cases et par d\u00e9faut robustes<\/h2>\n\n<p>Toutes les ressources n'ont pas de r\u00e8gles de modification claires. Pour les plans de site g\u00e9n\u00e9r\u00e9s, les flux ou les tableaux de bord, je d\u00e9finis des valeurs par d\u00e9faut prudentes : <em>no-cache<\/em> plus ETag\/Last-Modified. En cas d'horloges instables entre les syst\u00e8mes en amont, j'\u00e9vite les comparaisons rigides des secondes et je pr\u00e9f\u00e8re les ETags qui sont ind\u00e9pendants des horodatages. Si la compression est variable (diff\u00e9rents niveaux de gzip), j'int\u00e8gre le r\u00e9sultat de la compression dans la g\u00e9n\u00e9ration d'ETags ou je passe \u00e0 des ETags faibles. Et si les clients demandent sans validateurs, je donne des signaux clairs : Soit une fra\u00eecheur claire (max-age\/immutable), soit une validation claire (no-cache + ETag). Ces <em>robustes par d\u00e9faut<\/em> veillent \u00e0 ce que m\u00eame les clients incomplets ou d\u00e9fectueux ne d\u00e9clenchent pas de pics de charge intempestifs.<\/p>\n\n<h2>Bref r\u00e9sum\u00e9<\/h2>\n\n<p>Relier les requ\u00eates conditionnelles <strong>Tempo<\/strong> et l'actualit\u00e9, en ne demandant aux clients des ressources compl\u00e8tes que si le contenu a \u00e9t\u00e9 modifi\u00e9. J'utilise le contr\u00f4le de cache pour la fra\u00eecheur, je combine Last-Modified et ETag pour des v\u00e9rifications fiables et je r\u00e9ponds syst\u00e9matiquement par 304 si les conditions sont remplies. J'isole les contenus personnalis\u00e9s et confidentiels avec private ou no-store, afin qu'aucune donn\u00e9e ne se retrouve dans des caches partag\u00e9s. Les mesures dans DevTools, les logs et les m\u00e9triques me montrent o\u00f9 je peux \u00e9tirer les d\u00e9lais ou aff\u00fbter la logique de validation. En combinant ces \u00e9l\u00e9ments, on obtient des pages plus rapides, des serveurs moins sollicit\u00e9s et une meilleure qualit\u00e9 de service. <strong>plus rond<\/strong> Exp\u00e9rience utilisateur sans gaspillage de donn\u00e9es.<\/p>","protected":false},"excerpt":{"rendered":"<p>Apprends comment les requ\u00eates conditionnelles HTTP et la validation du cache avec ETag, Last-Modified et Cache-Control optimisent la mise en cache de ton navigateur et augmentent la performance.<\/p>","protected":false},"author":1,"featured_media":19514,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-19521","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plesk-webserver-plesk-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"88","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"HTTP Conditional","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"19514","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/19521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/comments?post=19521"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/19521\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media\/19514"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media?parent=19521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/categories?post=19521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/tags?post=19521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}