web-dev-qa-db-fra.com

Charger index.html à chaque fois depuis le serveur et NON depuis le cache

J'ai une page Web index.html hébergée sur un serveur particulier. J'ai pointé example.com à example.com/index.html. Ainsi, lorsque j'apporte des modifications dans index.html et l'enregistre, puis j'essaie d'ouvrir example.com, les modifications ne sont pas reflétées. Raison pour laquelle les pages Web sont mises en cache.

Ensuite, je rafraîchis manuellement la page et comme il charge les nouvelles copies et non depuis le cache, cela fonctionne bien. Mais je ne peux pas demander à mon client de le faire et il veut que tout soit parfait. Ma question est donc la suivante: y a-t-il une astuce ou une technique pour faire en sorte que le fichier se charge à chaque fois depuis le serveur et non depuis le cache?

P.S: Je connais l'astuce pour les fichiers CSS, JS et images, c'est-à-dire en ajoutant ?v=1 mais je ne sais pas comment le faire pour index.html.

Toute aide serait appréciée. Merci!

42
Pulkit Mittal

par ça:

<meta http-equiv="expires" content="0">

La définition du contenu sur "0" indique aux navigateurs de toujours charger la page à partir du serveur Web.

45
doniyor

Les balises META n'ont pas fonctionné pour moi, donc. j'ai mis les en-têtes de la classe Java qui implémente le filtre ou le contrôleur. et cela a fonctionné. voici le code

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies.
8
user3979672

Il n'y a que deux moyens les plus fiables disponibles à partir de 2018

1) **<meta http-equiv="expires" content="0">** Utilisez cette balise META mais soyez prudent car cette balise détruit tout le cache de la page dès qu'une page Web est traitée par le navigateur.

2) Générez un ID unique sur le serveur pour chaque demande de page et ajoutez cet identifiant à la fin du nom de tout le fichier dans le document HTML avec? avant que l'identifiant unique ne soit ajouté aux images, documents, fichiers css/js, vidéos, etc. qui doivent être chargés à chaque fois depuis le serveur. Par exemple, si vous avez la balise HTML comme <img src="images/profile223.jpg" alt="profile picture"> puis côté serveur ajoutez l'ID unique à la fin du nom de fichier comme ceci echo '<img src="images/profile223.jpg?'.$uniqueid.'"" alt="profile picture">';. Dans cet exemple, j'utilise php mais vous pouvez générer l'identifiant unique dans n'importe quelle langue. Toutes les grandes entreprises comme Google, Facebook, Microsoft, Twitter, etc. utilisent cette technique car c'est le moyen le plus efficace et n'affecte pas les données de cache que vous souhaitez stocker sur le navigateur de l'utilisateur comme l'identifiant de session de connexion. Cette technique est multi-navigateur compatible et supporte les anciennes versions d'IE, Firefox, Chrome, Safari et Opera. Vous pouvez ajouter l'identifiant unique à la fin de l'url en utilisant la même technique

4
Sam

Vous pouvez essayer cette méthode ci-dessous. Cela a fonctionné pour moi.

Veuillez ajouter les lignes de code ci-dessous dans votre fichier .htaccess.

<IfModule mod_headers.c>

    <FilesMatch "\.(html|php)$">
        Header set Cache-Control "no-cache, no-store, must-revalidate"
        Header set Pragma "no-cache"
        Header set Expires 0
    </FilesMatch>

    <FilesMatch "\.(ico|pdf|jpg|png|gif|js|css)$">
        Header set Cache-Control "max-age=172800, public, must-revalidate"
    </FilesMatch>

</IfModule>

Si vous utilisez le code ci-dessus, le navigateur ne mettra pas en cache les fichiers .html.

Vous pouvez envoyer des en-têtes supplémentaires avec le fichier pour indiquer au client (le navigateur, c'est-à-dire) que le fichier ne doit pas être mis en cache. Si vous avez Apache, jetez un œil à mod_expires . Si vous utilisez un langage de script côté serveur, comme PHP, vous pouvez également le résoudre en utilisant cela.

1
GolezTrol

j'ai jamais rencontré ce problème avec mon site Web. dans votre URL, ajoutez le q = ''

http://yoururl.com/somelinks?q=fill_with_random_number

pour moi, ça marche

1
ahr