web-dev-qa-db-fra.com

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

Je développe une application Javascript d'une seule page dans MAMP. Mes fichiers de modèle JavaScript et HTML sont mis en cache entre les demandes.

Existe-t-il un moyen simple d'indiquer dans MAMP que je souhaite empêcher la mise en cache de fichiers http? Peut-être avec un fichier .htaccess? Où puis-je placer le .htaccess ou modifier l'hôte virtuel pour MAMP sur Mac?

130
dmck

J'ai essayé ça? Devrait fonctionner dans .htaccess, httpd.conf et dans un VirtualHost (généralement placé dans httpd-vhosts.conf si vous l'avez inclus à partir de 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>

100% Empêcher la mise en cache des fichiers

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

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

Et éventuellement ajouter l'extension pour les fichiers de modèle que vous récupérez si vous utilisez une extension autre que .html pour ceux-ci.

297
Charlie Rudenstål

Basé sur l'exemple 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>
5
Frank Farmer

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

Recherchez le fichier php.ini et commentez les lignes OPCache. J'espère que cette réponse alternative aide également les autres.

3
acarito

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 Stool Overflow de @brianegge , où la solution mod_expires est également expliquée)

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

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

Si cette URL sur 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 randomiser les URL en ajoutant simplement des paramètres de chaîne de requête aléatoires constitue par exemple le paramètre de base de la requête ajax jQuery. Le navigateur ne considérera jamais que deux URL ayant différentes chaînes de requête sont identiques, 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 le mot clé Header .

2
regilero