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

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

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

121
demandé sur Rishabh 2012-07-18 04:16:02

4 réponses

a essayé? Devrait fonctionner à la fois dans .htaccess , httpd.conf et dans un VirtualHost (généralement placé dans httpd-vhosts.conf si vous l'avez inclus 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 les fichiers d'être mis en cache

c'est similaire à la façon dont google ads emploie 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 obtenez si vous utilisez une extension autre que .html pour ceux.

276
répondu Charlie Rudenstål 2012-07-30 15:37:16

basé sur l'exemple ici: http://drupal.org/node/550488

fonctionnera probablement .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
répondu Frank Farmer 2012-07-19 01:32:37

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

essentiellement trouver le php.fichier ini et commentez les lignes OPCache. J'espère que cette réponse alternative aidera les autres.

3
répondu acarito 2017-05-23 12:03:04

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 quelques en-têtes par défaut sur la réponse, en faisant le travail de mod_expires comme cela:

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

(tiré de: Stack Overflow answer de @brianegge , où la solution mod_expires est également expliquée)

ça ne marchera pas pour fichiers statiques comme vos fichiers javascript. Comme pour 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 de fichiers javascript, ce qui est fait sur votre navigateur, vous pouvez utiliser un jeton aléatoire à la fin de l'url js, quelque chose comme ?rd=45642111 , de sorte que l'url ressemble à:

<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 l'url en ajoutant simplement les paramètres de la chaîne de requête aléatoire est le paramètre de base upôn no-cache de la requête ajax jQuery par exemple. Le navigateur ne considérera jamais 2 url ayant des chaînes de requête différentes pour être le même, et n'utilisera jamais la version mise en cache.

MODIFIER

notez que vous devez également tester mod_headers . Si vous avez mod_headers, vous pouvez peut-être définir les en-têtes Expires directement avec le en-tête mot-clé.

2
répondu regilero 2017-05-23 11:54:48