77 votes

htaccess - Comment forcer le navigateur du client à vider le cache ?

Pour mon site, j'ai les règles htaccess suivantes :

# BEGIN Gzip
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</IfModule>
# END Gzip

# BEGIN EXPIRES
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 10 days"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType text/plain "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType application/x-icon "access plus 1 year"
</IfModule>
# END EXPIRES

Je viens de mettre à jour mon site et il était tout à fait bizarre jusqu'à ce que je vide mon cache. Comment puis-je obliger le navigateur du client à vider la mémoire cache après une mise à jour afin que l'utilisateur puisse voir les modifications ?

116voto

Saeed Neamati Points 12178

Vous pouvez forcer les navigateurs à mettre quelque chose en cache, mais

Vous ne pouvez pas forcer les navigateurs à vider leur cache.

Ainsi, le seul moyen (AMAIK) est d'utiliser une nouvelle URL pour vos ressources. Quelque chose comme le versioning.

66voto

jammypeach Points 3047

Comme d'autres réponses l'ont dit, changer l'URL est une bonne technique pour casser le cache, mais c'est beaucoup de travail de passer en revue un site plus grand, de changer toutes les URL et de déplacer les fichiers.

Une technique similaire consiste à ajouter un paramètre de version à la chaîne URL, qui est soit une chaîne/un nombre aléatoire, soit un numéro de version, et à cibler uniquement les fichiers modifiés.

Par exemple, si vous modifiez le CSS de votre site et qu'il semble bizarre jusqu'à ce que vous fassiez un rafraîchissement forcé, ajoutez simplement ?ver=1.1 à l'importation CSS en tête du fichier. Pour le navigateur, il s'agit d'un fichier différent, mais vous devez uniquement modifier l'importation, et non l'emplacement ou le nom du fichier.

par exemple

<link href="assets/css/style.css" rel="stylesheet" type="text/css" />

devient

<link href="assets/css/style.css?ver=1.1" rel="stylesheet" type="text/css" />

Fonctionne aussi très bien pour les fichiers javascript.

20voto

RAJ ... Points 3175

J'ai compris votre problème...

Bien que nous ne puissions pas effacer complètement le cache du navigateur du client, vous pouvez ajouter un code à votre application pour que vos modifications récentes soient reflétées dans le navigateur du client.

Dans votre <head> :

<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

Fuente: http://goo.gl/JojsO

5voto

Alex Points 6950

Vous ne pouvez pas forcer les navigateurs à vider le cache.

Votre fichier .html semble être rechargé plus tôt car il expire après 10 jours. Ce que vous devez faire est de mettre à jour votre fichier .html et de déplacer tous vos fichiers dans un nouveau dossier tel que version-2/ ou ajouter un identifiant de version à chaque fichier comme mypicture-2.jpg . Ensuite, vous faites référence à ces nouveaux fichiers dans votre fichier .html et le navigateur les chargera à nouveau parce que l'emplacement a changé.

3voto

mkmnstr Points 378

Dans mon cas, je modifie beaucoup un fichier JS spécifique et j'ai besoin qu'il soit dans sa dernière version dans tous les navigateurs où il est utilisé.

Je n'ai pas de numéro de version spécifique pour ce fichier, donc Je hache simplement la date et l'heure actuelles (heure et minute). et le passer comme numéro de version :

<script src="/js/panel/app.js?v={{ substr(md5(date("Y-m-d_Hi")),10,18) }}"></script>

J'ai besoin qu'il soit chargé toutes les minutes, mais vous pouvez décider quand il doit être rechargé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X