149 votes

Comment empêcher la mise en cache des fichiers http dans Apache httpd (MAMP)

Je développe une application Javascript à page unique dans MAMP. Mes fichiers JavaScript et HTML sont mis en cache entre les requêtes.

Existe-t-il un moyen simple d'indiquer dans MAMP que je veux empêcher la mise en cache des fichiers http ? Éventuellement avec un .htaccess ? Où dois-je placer le .htaccess ou modifier l'hôte virtuel pour MAMP sur Mac ?

331voto

Charlie Rudenstål Points 1238

Vous avez essayé cela ? Cela devrait fonctionner dans les deux cas .htaccess , httpd.conf et dans un VirtualHost (généralement placé dans httpd-vhosts.conf si vous l'avez inclus dans votre httpd.conf)

<filesMatch "\.(html|htm|js|css)$">
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
  </ifModule>
</filesMatch>

Empêcher à 100 % la mise en cache des fichiers

Ceci est similaire à la façon dont les publicités de Google utilisent l'en-tête Cache-Control : private, x-gzip-ok="". > pour empêcher la mise en cache des publicités par les proxys et les clients.

De http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html

Et ajoutez éventuellement l'extension des fichiers modèles que vous récupérez si vous utilisez une extension autre que .html pour ceux-là.

5voto

Frank Farmer Points 16159

Sur la base de l'exemple présenté ici : http://drupal.org/node/550488

Ce qui suit fonctionnera probablement dans .htaccess

 <IfModule mod_expires.c>
   # Enable expirations.
   ExpiresActive On

   # Cache all files for 2 weeks after access (A).
   ExpiresDefault A1209600

  <FilesMatch (\.js|\.html)$>
     ExpiresActive Off
  </FilesMatch>
 </IfModule>

3voto

acarito Points 145

J'ai eu le même problème, mais j'ai trouvé une bonne solution ici : Arrêter la mise en cache pour PHP 5.5.3 dans MAMP

Il suffit de trouver le fichier php.ini et de commenter les lignes OPCache. J'espère que cette réponse alternative aidera d'autres personnes.

2voto

regilero Points 13640

Sans mod_expires il sera plus difficile de définir des en-têtes d'expiration sur vos fichiers. Pour tout ce qui est généré, vous pouvez certainement définir des en-têtes par défaut sur la réponse, faisant ainsi le travail de mod_expires :

<?php header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600)); ?>

(extrait de : Réponse de Stack Overflow de @brianegge (où la solution mod_expires est également expliquée)

Cela ne fonctionnera pas pour fichiers statiques comme vos fichiers javascript. En ce qui concerne les fichiers statiques, il n'y a qu'Apache (sans aucun module d'expiration) entre le navigateur et le fichier source. Pour empêcher la mise en cache des fichiers javascript, qui se fait sur votre navigateur, vous pouvez utiliser un module d'expiration jeton aléatoire à la fin de l'url js, quelque chose comme ?rd=45642111 de sorte que l'url ressemble à ce qui suit :

<script type="texte/javascript" src="my/url/myjs.js?rd=4221159546">

Si l'url de la page est générée par un fichier PHP, vous pouvez simplement ajouter la partie aléatoire avec PHP. Cette façon de rendre l'url aléatoire en ajoutant simplement des paramètres aléatoires à la chaîne de requête est la base de l'option no-cache de la requête ajax jQuery, par exemple. Le navigateur ne considérera jamais que 2 url ayant des chaînes de requête différentes sont les mêmes, et n'utilisera jamais la version mise en cache.

EDIT

Notez que vous devriez également tester mod_headers . Si vous avez mod_headers, vous pouvez peut-être définir les en-têtes Expires directement avec l'option En-tête mot-clé.

1voto

Bipin Bahuguna Points 11
<FilesMatch "\.(js|css)$">
  ExpiresActive On
  ExpiresDefault A1
  Header append Cache-Control must-revalidate
</FilesMatch>

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