{"id":1009,"date":"2011-02-13T17:27:01","date_gmt":"2011-02-13T16:27:01","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=1009"},"modified":"2020-06-10T23:57:10","modified_gmt":"2020-06-10T21:57:10","slug":"mettre-en-cache-les-fichiers-statiques-de-votre-site-web-htaccess","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/mettre-en-cache-les-fichiers-statiques-de-votre-site-web-htaccess","title":{"rendered":"Mettre en cache les fichiers statiques de votre site Web (htaccess)"},"content":{"rendered":"<p>J&rsquo;avais compl\u00e8tement oubli\u00e9 de vous en parler, et pourtant c&rsquo;\u00e9tait pr\u00e9vu depuis l&rsquo;article sur l&rsquo;<a title=\"Article de Mai 2010 sur le blog CreativeJuiz\" href=\"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/optimiser-le-chargement-de-vos-pages-avec-la-compression-gzip\">optimisation du chargement de vos pages gr\u00e2ce \u00e0 la compression Gzip<\/a>.<br \/>\nToujours li\u00e9e \u00e0 l&rsquo;optimisation de votre site Web, et \u00e0 l&rsquo;utilisation d&rsquo;un <!--more--><a title=\"Article sur Wikipedia \u00e0 ce sujet (nouvelle fen\u00eatre)\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Htaccess\" target=\"_blank\" rel=\"noopener noreferrer\">fichier .htaccess<\/a>, la mise en cache des fichiers statiques permet d&rsquo;\u00e9conomiser du temps au chargement des fichiers cibl\u00e9s.<\/p>\n<h2>Quelques d\u00e9finitions<\/h2>\n<dl>\n<dt>.htaccess<\/dt>\n<dd>Le fichier .htaccess vous permet de communiquer avec votre serveur (apache) dans le but d&rsquo;en changer une partie des param\u00e8tres et des comportements par d\u00e9faut<\/dd>\n<dt>Serveur Apache<\/dt>\n<dd>Il s&rsquo;agit d&rsquo;un format de serveur, il est le plus r\u00e9pandu dans le monde, et est utilis\u00e9 par la plupart des fournisseurs d&rsquo;h\u00e9bergement (gratuit ou payant &#8211; Par ici pour <a href=\"https:\/\/www.opportunites-digitales.com\/hebergeur-web\/\">choisir un h\u00e9bergeur web<\/a> compatible Apache)<\/dd>\n<dt>Headers<\/dt>\n<dd>En-t\u00eate, en anglais, il s&rsquo;agit d&rsquo;informations que l&rsquo;on place en t\u00eate de page afin d&rsquo;orienter le navigateur vers telle ou telle interpr\u00e9tation de la page. Par exemple, l&rsquo;en-t\u00eate charset va permettre de d\u00e9finir le mode de lecture des caract\u00e8res de la page.<\/dd>\n<dt>Le cache<\/dt>\n<dd>Il s&rsquo;agit de donn\u00e9es \u00ab\u00a0enregistr\u00e9es\u00a0\u00bb dans un \u00e9tat statique sur un syst\u00e8me. Ces donn\u00e9es ne seront pas recalcul\u00e9es lors d&rsquo;une requ\u00eate (interrogation du serveur). Cela permet un affichage plus rapide des pages, et donc une navigation plus agr\u00e9able.<\/dd>\n<\/dl>\n<h2>Le cache navigateur<\/h2>\n<p>Le cache du navigateur permet de stocker les fichiers statiques directement sur le poste de l&rsquo;utilisateur. C&rsquo;est une technique int\u00e9ressante dans le sens o\u00f9 elle met \u00e0 profit le syst\u00e8me de stockage de l&rsquo;utilisateur (ainsi si le site est lent \u00e0 s&rsquo;afficher, ce sera uniquement de la faute de l&rsquo;utilisateur&#8230; :p non je plaisante, bien s\u00fbr).<br \/>\nCette technique est int\u00e9ressante car elle <strong>diminue le nombre de requ\u00eates<\/strong> effectu\u00e9es par le navigateur au serveur distant (serveur sur lequel est stock\u00e9 le site Web). En effet le navigateur interroge d&rsquo;abord son cache pour voir s&rsquo;il n&rsquo;a pas le fichier en r\u00e9serve avant d&rsquo;interroger le serveur (dans le cas o\u00f9 le fichier n&rsquo;est pas en cache).<\/p>\n<p>Voici le code correspondant \u00e0 entrer dans votre fichier .htaccess :<\/p>\n<pre class=\"code\"><code class=\"html\">## contr\u00f4le du cache navigateur - Expire headers\r\n&lt;IfModule mod_expires.c&gt;\r\n\tExpiresActive On\r\n\tExpiresDefault \"access plus 7200 seconds\"\r\n\tExpiresByType image\/jpg \t\t\t\"access plus 1 week\"\r\n\tExpiresByType image\/jpeg \t\t\t\"access plus 1 week\"\r\n\tExpiresByType image\/png \t\t\t\"access plus 1 week\"\r\n\tExpiresByType image\/gif \t\t\t\"access plus 1 week\"\r\n\tExpiresByType image\/svg+xml\t\t\t\"access plus 1 week\"\r\n\tAddType image\/x-icon .ico\r\n\tExpiresByType image\/ico \t\t\t\"access plus 1 week\"\r\n\tExpiresByType image\/icon \t\t\t\"access plus 1 week\"\r\n\tExpiresByType image\/x-icon \t\t\t\"access plus 1 week\"\r\n\tExpiresByType text\/css \t\t\t\t\"access plus 1 week\"\r\n\tExpiresByType text\/javascript \t\t\"access plus 1 week\"\r\n\tExpiresByType text\/html \t\t\t\"access plus 7200 seconds\"\r\n\tExpiresByType application\/xhtml+xml \t\"access plus 7200 seconds\"\r\n\tExpiresByType application\/javascript \t\"access plus 1 week\"\r\n\tExpiresByType application\/x-javascript \t\"access plus 1 week\"\r\n\tExpiresByType application\/x-shockwave-flash \"access plus 1 week\"\r\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>Comme vous pouvez le voir, nous pr\u00e9cisons une date d&rsquo;expiration pour la plupart des types de fichiers utilis\u00e9s pour notre site.<br \/>\nL&rsquo;int\u00e9r\u00eat est d&rsquo;avoir une mise en cache plut\u00f4t longue, mais qui ne bloque pas non plus la mise \u00e0 jour des fichiers si vous effectuez des changements de temps \u00e0 autres.<br \/>\nIl faut trouver le juste milieu en fonction de la fr\u00e9quence de vos mises \u00e0 jour, et l&rsquo;importance du trafic sur votre site.<br \/>\nPour ajouter d&rsquo;autres type MIME vous pouvez en consulter la liste sur <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Type_MIME\">Wikipedia<\/a>.<\/p>\n<h2>Mise en cache, cache-control<\/h2>\n<p>La cache-control est un compl\u00e9ment \u00e0 l&rsquo;expire-headers, il permet de g\u00e9rer le comportement du cache en fonction des fichiers et du navigateur utilis\u00e9.<br \/>\nToujours sur notre fichier .htaccess :<\/p>\n<pre class=\"code\"><code class=\"html\">&lt;IfModule mod_headers.c&gt;\r\n\r\n&lt;FilesMatch \"\\\\.(ico|jpe?g|png|gif|swf)$\"&gt;\r\nHeader set Cache-Control \"max-age=2592000, public\"\r\n&lt;\/FilesMatch&gt;\r\n\r\n&lt;FilesMatch \"\\\\.(css)$\"&gt;\r\nHeader set Cache-Control \"max-age=604800, public\"\r\n&lt;\/FilesMatch&gt;\r\n\r\n&lt;FilesMatch \"\\\\.(js)$\"&gt;\r\nHeader set Cache-Control \"max-age=216000, private\"\r\n&lt;\/FilesMatch&gt;\r\n\r\n&lt;FilesMatch \"\\\\.(x?html?|php)$\"&gt;\r\nHeader set Cache-Control \"max-age=600, private, must-revalidate\"\r\n&lt;\/FilesMatch&gt;\r\n\r\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>Le caract\u00e8re <em lang=\"en\">private<\/em> ou <em lang=\"en\">public<\/em> permet de d\u00e9finir si le stockage se fait pour tout le monde (<em lang=\"en\">public<\/em>) ou uniquement pour les non proxys (<em lang=\"en\">private<\/em>).<br \/>\nLes documents HTML et PHP ne sont pas mis longtemps en cache comme vous pouvez le constater, c&rsquo;est une habitude avec les fichiers dynamiques.<br \/>\nDe plus l&rsquo;argument <em>must-revalidate<\/em> est pr\u00e9cis\u00e9 afin d&rsquo;avoir un contr\u00f4le plus fin sur la version du fichier mis en cache. (si quelqu&rsquo;un a de la documentation \u00e0 ce sujet je suis preneur, car c&rsquo;est le seul r\u00e9sum\u00e9 que je peux offrir \u00e0 l&rsquo;heure actuelle)<\/p>\n<h2>Les ETags<\/h2>\n<p>Ces petites b\u00eates permettent de distinguer les versions de chaque document.<br \/>\nAinsi le navigateur demande au serveur quelle version il a du document toto.js, le serveur lui r\u00e9pond et une comparaison s&rsquo;effectue alors.<br \/>\nSi les num\u00e9ros de version sont les m\u00eames, alors le navigateur utilise son cache, si les num\u00e9ros sont diff\u00e9rents, le navigateur r\u00e9cup\u00e8re le fichier du serveur (et le met en cache).<br \/>\nC&rsquo;est du moins ce que j&rsquo;en ai compris.<\/p>\n<p>Aussi, si vous avez programm\u00e9 votre gestion de cache, ces \u00e9changes entre navigateur et serveur deviennent inutiles, leur suppression peut donc vous permettre de gagner en vitesse lors du chargement de vos pages.<\/p>\n<pre class=\"code\"><code class=\"html\">Header unset ETag\r\nFileETag none<\/code><\/pre>\n<p>Chez moi \u00e7a ne fonctionne pas, il semblerait qu&rsquo;OVH ne g\u00e8re pas les ETag, mais j&rsquo;explore les forums pour trouver une r\u00e9ponse \u00e0 cette question.<\/p>\n<h2>\u00c9viter l&rsquo;envoi de cookies<\/h2>\n<p>Chez OVH, et d&rsquo;autres, les serveurs d\u00e9livrent automatiquement de petits cookies avec des noms bien particuliers d\u00e9pendant souvent de votre offre d&rsquo;h\u00e9bergement.<br \/>\nCes cookies sont bien utiles dans certains cas, mais pas tout le temps.<br \/>\nSi votre site ne propose pas un champs de connexion avec une case \u00ab\u00a0se souvenir de moi\u00a0\u00bb, ou un syst\u00e8me complexe de formulaire et de session d&rsquo;espace membre, peut-\u00eatre que le code suivant vous servira :<\/p>\n<pre class=\"code\"><code class=\"html\">Header unset Set-Cookie<\/code><\/pre>\n<p>Ceci pour une version \u00ab\u00a0c\u00f4t\u00e9 client\u00a0\u00bb, le suivant pour une action directement sur le serveur qui ne fonctionne pas toujours (d\u00e9pend de son param\u00e9trage)<\/p>\n<pre class=\"code\"><code class=\"html\">RequestHeader unset Cookie<\/code><\/pre>\n<p>Si quelqu&rsquo;un a des corrections \u00e0 apporter \u00e0 ce sujet, qu&rsquo;il n&rsquo;h\u00e9site pas \u00e0 nous en faire part via un petit commentaire \ud83d\ude42<br \/>\nMerci \u00e0 <a title=\"Commentaire plus bas...\" href=\"#comment-573\">Nico pour son commentaire<\/a>.<\/p>\n<h2>Conclusion<\/h2>\n<p><img decoding=\"async\" class=\"alignright size-full wp-image-1025\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/optimisation-cache-site-web1.jpg\" alt=\"&quot;Comment j'ai un site trop trop rapide maintenant ! (parce que je le vaux bien)&quot;.\" width=\"250\" height=\"234\" \/>Tout plein de codes pour vous aider \u00e0 optimiser le chargement de vos pages.<br \/>\nCes codes sont, bien entendu, \u00e0 adapter en fonction des types de fichiers que vous utilisez, ainsi que de la fr\u00e9quence de vos mises \u00e0 jour et l&rsquo;importance de votre trafic.<br \/>\nN&rsquo;h\u00e9sitez pas \u00e0 parcourir le Web pour trouver de nombreux conseils d&rsquo;optimisations, notamment certains adapt\u00e9s \u00e0 un syst\u00e8me donn\u00e9. (WordPress, Joomla!, etc.)<\/p>\n<p>N&rsquo;oubliez pas d&rsquo;utiliser les commentaires sur votre fichier .htaccess pour vous y retrouver et organiser vos diff\u00e9rents codes :<\/p>\n<pre class=\"code\"><code class=\"html\"># Ceci est un commentaire sur une ligne<\/code><\/pre>\n<p>Si vous avez des pr\u00e9cisions \u00e0 apporter \u00e0 cet article, je suis \u00e0 votre \u00e9coute, l&rsquo;Apache n&rsquo;est pas ma sp\u00e9cialit\u00e9 \ud83d\ude09<br \/>\nMerci<\/p>\n<div class=\"sources\">\n<h2>Sources et liens utiles<\/h2>\n<ul>\n<li><a title=\"Article sur Wikipedia \u00e0 ce sujet (nouvelle fen\u00eatre)\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Htaccess\" target=\"_blank\" rel=\"noopener noreferrer\">fichier .htaccess<\/a><\/li>\n<li><a title=\"Article de Mai 2010 sur le blog CreativeJuiz\" href=\"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/optimiser-le-chargement-de-vos-pages-avec-la-compression-gzip\">La compression Gzip<\/a><\/li>\n<li><a title=\"Article surSeomix \u00e0 ce sujet (nouvelle fen\u00eatre)\" href=\"http:\/\/www.seomix.fr\/web\/developpement\/guide-htaccess-performances-et-temps-de-chargement\/\" target=\"_blank\" rel=\"noopener noreferrer\">Article sur le fichier Htaccess<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;avais compl\u00e8tement oubli\u00e9 de vous en parler, et pourtant c&rsquo;\u00e9tait pr\u00e9vu depuis l&rsquo;article sur l&rsquo;optimisation du chargement de vos pages gr\u00e2ce \u00e0 la compression Gzip. Toujours li\u00e9e \u00e0 l&rsquo;optimisation de votre site Web, et \u00e0 l&rsquo;utilisation d&rsquo;un<\/p>\n","protected":false},"author":4,"featured_media":1021,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[9],"tags":[320,316,317,24,318,168,321,319],"coauthors":[597],"class_list":["post-1009","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriels","tag-apache","tag-cache","tag-fichier","tag-google","tag-htaccess","tag-page","tag-serveur","tag-speed"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1009","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=1009"}],"version-history":[{"count":1,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1009\/revisions"}],"predecessor-version":[{"id":7449,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1009\/revisions\/7449"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/1021"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=1009"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=1009"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=1009"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=1009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}