Bonsoir

J'ai un grand nombre de pages HTML qui référencent les mêmes pages de styles et les mêmes fichiers js.
Normalement un navigateur est sensé vérifier que la version qu'il a en cache a la même date de mise à jour que celui qui est sur le site, et provoquer le rechargement si ce n'est pas le cas.
Je constate que ce n'est pas le ce qui se produit, ce qui conduit à des comportements aberrants et difficiles à détecter, mais qui disparaissent comme par enchantement le lendemain...

Y a-t-il un moyen pour que ce rechargement soit imposé par le serveur, sans demander aux utilisateur de forcer le rechargement, choses que les non techniciens ne penseront jamais à faire?
Bonjour,

En html j'utilise ce code :

<META HTTP-EQUIV="Refresh" CONTENT="30; URL=http://www.site.com/page.html"> 

A mettre dans le "head" de la page "30 correspond au délais de rechargement en secondes

cordialement
Modifié par webser (22 Oct 2016 - 18:30)
Merci de la réponse, mais ce n'est pas ce dont je voulais parler je me suis donc mal exprimé
Je reprends donc mon explication.
J'ai plusieurs centaines de page qui ont ce contenu:

<!DOCTYPE html>
<html lang="fr" data-version="2.0">
    <head>
        <meta charset="utf-8" />
	<title>.......</title>
        <script type="text/javascript" src="/common.js"></script>
        <link href="/common.css" rel="stylesheet" type="text/css" />
	</head>]

Ce que je constate, c'est que si je modifie le fichier /common.js ou le fichier /common.css, selon le navigateur qui charge l'une de ces pages, la nouvelle version n'est pas systématiquement chargée: le navigateur conserve la version précédente en cache.
Ma question est donc: comment faire en sorte que les navigateurs rechargent ces pages quand elles ont été modifiées?
Modifié par PapyJP (22 Oct 2016 - 19:18)
PapyJP a écrit :
Merci de la réponse, mais ce n'est pas ce dont je voulais parler je me suis donc mal exprimé
Je reprends donc mon explication.
J'ai plusieurs centaines de page qui ont ce contenu:

&lt;!DOCTYPE html&gt;
&lt;html lang="fr" data-version="2.0"&gt;
    &lt;head&gt;
        &lt;meta charset="utf-8" /&gt;
	&lt;title&gt;.......&lt;/title&gt;
        &lt;script type="text/javascript" src="/common.js"&gt;&lt;/script&gt;
        &lt;link href="/common.css" rel="stylesheet" type="text/css" /&gt;
	&lt;/head&gt;]

Ce que je constate, c'est que si je modifie le fichier /common.js ou le fichier /common.css, selon le navigateur qui charge l'une de ces pages, la nouvelle version n'est pas systématiquement chargée: le navigateur conserve la version précédente en cache.
Ma question est donc: comment faire en sorte que les navigateurs rechargent ces pages quand elles ont été modifiées?

Normalement, la gestion du cache se fait via les entêtes HTTP mais tu peux essayer ceci :
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

Pas très propre et sujet à variation selon les navigateurs, mais à tester.
Sinon, si tu peux gérer dynamiquement le nom de tes scripts et leur appel depuis les pages HTML, un moyen plutôt efficace est de changer le nom à chaque version...
Question récurrentes pour les fichiers en cache. On peut bien sûr renommer le fichier et le lien qui le pointe à la mano...

Ou mieux : avec des gestionnaires de tâche (Grunt, Gulp) que l'on paramètre pour cette action. Donc renommage du fichier à l'enregistrement plus réécriture du nouveau lien dans le template.

Si l'on est sur un site dynamique on peut aussi opter pour une annotation en fin de fichier genre :
main.css?ver=221016

Grâce à une fonction php du genre :
date( 'dmy' )

Solution à adopter seulement pour la période de développement, quand le site n'est pas encore stabilisé, car certains navigateurs ne mettent pas les fichiers finissant par des "?" en cache.
Comme il y a près de 1000 pages, je déduis de vos réponses -- qui sont celles que j'aurais faites moi même -- qu'il n'y a pas de solution (connue) à ce problème.
Ce qui s'est passé hier est significatif:
1) je livre 120 fichiers HTML fabriqués par la moulinette PHP dont j'ai déjà parlé
2) je livre une nouvelle version de /common.js et de /common.css
3) le propriétaire du site installe les 122 fichiers sur le site officiel
4) les nouveaux fichiers HTML sont bien appelés, mais ils référencent tous les anciennes versions des fichier /common.js et /common.css
5) ce matin je fais des essais: tout était rentré dans l'ordre sur mon PC avec FF, mais pour le PC du propriétaire sous chrome, il a fallu forcer le rechargement.
Bonjour,
Je ne sais pas ce que fait exactement ta moulinette php, mais la solution proposé par Olivier C fonctionne bien.

Comme ce sont les mêmes fichiers statiques qui sont appelés depuis toutes tes pages html, tu pourrais dire à ta moulinette de remplacer par exemple common.js par
'common.js?'. date( 'dmy' );


Ou sinon, notepadd++ par exemple permet de rechercher - remplacer dans plusieurs fichiers à la fois.
A chaque version que tu livres, tu fait un rechercher remplacer de common.js par 'common.js?numero_de_version' ou ce que tu veux pourvu que la chaîne change à chaque mise à jour.
Modifié par loicbcn (24 Oct 2016 - 08:44)
De toute manière - et que ce soit pour un site dynamique comme pour un site statique - il s'agit bien d'un problème de cache non ?

Donc s'il s'agit d'un site statique, il faut procéder comme je l'ai dis plus haut : renommage du fichier pour que la nouvelle version soit prise en compte plus réécriture des liens pointant vers ce fichier par copier-remplacer, le tout pouvant se faire en javascript (ou autre) au moment de la compilation.

Qu'il y ait deux ou dix mille pages cela ne change rien, moi je procède toujours ainsi. Encore heureux que l'on ne soit pas obligé de reprendre toutes les pages statiques une par une...
Modifié par Olivier C (24 Oct 2016 - 11:04)