web-dev-qa-db-fra.com

Comment forcer un navigateur à actualiser une version en cache d'une page Web

J'ai un site Web qui, en raison d'un fichier de configuration Apache mal préparé, a demandé aux utilisateurs de mettre en cache une URL de site Web plusieurs années à l'avenir. Par conséquent, lorsqu'une personne visite le site, elle n'essaie souvent même pas de demander la page. Le navigateur charge simplement le HTML du cache.

Ce site Web est sur le point d'obtenir une mise à jour majeure, et j'aimerais que les utilisateurs puissent le voir. Existe-t-il un moyen pour moi de forcer un utilisateur à demander à nouveau la page Web? Je crains que pour certains utilisateurs, à moins qu'ils n'appuient sur F5, ils puissent voir l'ancienne page Web pendant plusieurs années.

25
Chris

Utilisez différentes URL. Si le point d'entrée principal de votre site Web (comme le fichier d'index principal) est mis en cache, alors vous êtes foutu ... peut-être devriez-vous enregistrer un autre nom de domaine?

18
liori

Il existe plusieurs options pour y parvenir. Dans la section, ajoutez la balise meta:

<meta http-equiv="pragma" content="no-cache" />

Fondamentalement, le navigateur ne mettra pas la page en cache.

Une autre option est de définir des sessions, cela forcera le navigateur à une nouvelle session à chaque fois, et fera ainsi que le navigateur récupère la page du serveur au lieu du cache

<?php
session_start();

$_SESSION = array();
session_destroy();

?> 

Vous pouvez l'ajouter à votre site Web pendant quelques jours, puis le supprimer. Je ne sais vraiment pas si ça va marcher, mais peut-être vous le trouverez utile

5
Sorantis

On peut soutenir que si votre "mise à jour majeure" ne se fait que dans quelques semaines (2 ou 3), il vous suffit de reconfigurer votre conf Apache maintenant (pas de trucs futurs pour le HTML - uniquement pour les actifs et le contenu qui ne changeront probablement jamais ). Le cache de Firefox est de ~ 50 Mo par défaut et ce n'est pas beaucoup car les images sont également mises en cache et les sites Web modernes ont beaucoup de contenu.

Pas parfait - mais c'est ce que je ferais - quand je ne veux pas ou ne peux pas changer l'URL;)

4
biophonc

Je pense qu'il n'y a aucun moyen de le faire. S'ils ne contactent jamais votre serveur, vous ne pouvez vraiment rien y faire.

2
Jack Ryan

Des années de retard, mais cela pourrait aider quelqu'un sur la route: si vous avez n'importe quel fichier javascript qui n'est pas mis en cache des années dans le futur (c'est-à-dire si vous avez un moyen d'exécuter de nouveaux js sur le site mis en cache), ajoutez des js qui videront le cache par programmation . Une fois la configuration corrigée et/ou la mise à jour terminée, supprimez le js d'effacement du cache.

Ctrl + F5 dans jquery pour effacer le cache du navigateur

1
alexanderbird

changer les URL de chaque ressource

1
Alex. S.

Je me rends compte que cette question est très ancienne, mais j'ai une réponse viable:

Bien sûr, vous pouvez forcer de nouvelles URL pour éviter les caches courants (pas ceux à long terme) ...

C'est à dire.

  • Ajouter une requête aux fichiers statiques .js/.css/.html
  • Ajouter une balise meta pragma pour no-cache
  • Redirection côté serveur, pas de cache, éliminer les cookies, les sessions, etc.

Cependant, dans un scénario comme celui-ci (anciennement édité Apache .conf pour une mise en cache longue durée) puisque vous ne pouvez pas changer le domaine à des fins de référencement, il existe un `` hack grossier '' que vous pouvez utiliser qui minimisera l'impact sur le référencement:

Copiez votre page d'index (c'est-à-dire index.php) dans une nouvelle page (c'est-à-dire index_new.php) et modifiez httpd.conf (ou équivalent) afin que DirectoryIndex soit la nouvelle page. Ensuite, supprimez ou déplacez votre ancienne page, elle devrait théoriquement toujours rediriger vers la nouvelle page.

C'est à dire. dans Debian/Ubuntu:

cd /var/www
cp index.php index_new.php
Sudo vim /etc/Apache2/sites-enabled/000-default

    <Directory /var/www/>
        ...
        DirectoryIndex index_new.php
    </Directory>

mv index.php index_old.php
Sudo service Apache2 restart

Et voilà.

1
Carmelo Vargas

Vous pouvez apporter toutes les modifications nécessaires à l'intérieur des fichiers HTML, comme

<meta http-equiv="cache-control" content="no-cache, must-revalidate, post-check=0, pre-check=0" />
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />

Mais aussi, vous pouvez explicitement dire à Apache d'utiliser le module mod_expires.c et ajouter quelques directives au fichier httpd.conf:

<IfModule mod_expires.c>
  # Turn on the module.
  ExpiresActive on
  # Set the default expiry times.
  ExpiresByType text/html "modification plus 5 seconds"
  ExpiresByType text/javascript "modification plus 5 seconds"
  ExpiresDefault "access plus 2 days"
</IfModule>

De cette façon, vous ajoutez le contrôle du cache des en-têtes http et expire, aux réponses, afin que le navigateur mette à jour le cache 5 secondes après la modification du fichier dans l'origine, pour ces types de fichiers, et 2 jours après l'accès par le navigateur pour tous les autres types de fichiers.

J'espère que cela t'aides.

0
Camilo