web-dev-qa-db-fra.com

Comment empêcher la mise en cache de la page html5?

J'ai converti une page HTML Plain Vanilla en HMTL5/CSS3 avec une présentation dynamique, et pour des raisons de sécurité (dictée par les responsables de la sécurité), la page ne doit jamais se mettre en cache.

La page précédemment utilisée <meta http-equiv="Pragma" content="no-cache"> et <meta http-equiv="Expires" content="-1"> pour empêcher la mise en cache de la page.

Qu'est-ce qui remplace cela en HTML5? Comment empêcher une page HTML de se mettre en cache dans le client? 

J'ai passé une semaine à lire sur les fichiers de manifeste, mais ils semblent faire exactement le contraire de ce que je veux, car attacher un fichier de manifeste provoque explicitement la mise en cache de la page à laquelle il est attaché. 

Et s'il vous plaît, ne me référez pas à la définition du W3c indiquant quels méta-éléments sont désormais autorisés. Je comprends que HTML5 n'inclut pas les éléments cache-control ou Pragma dans les éléments meta

J'ai besoin de savoir ce que cela inclut pour empêcher la mise en cache d'une page.

29
gps03

Au début du code, vous devez utiliser ceci:

<!DOCTYPE html>
<html manifest="manifest.appcache">
...

Puis créez manifest.appcache

34
n1ckolas

Je n'aime pas beaucoup l'appcache. Cela fonctionne presque bien mais peut être une vraie douleur impitoyable. Lors de la refactorisation de code, je me suis rendu compte qu'après la déconnexion, je pouvais revenir à la dernière page. Bien sûr, l'actualisation du navigateur obligerait l'utilisateur à se reconnecter, mais cela n'est pas souhaité. 

Après avoir cherché et vu les options, j'ai commencé à être un peu frustré. Je ne veux pas utiliser appcache. J'ai ensuite réalisé que mon code redirigeait vers la page de connexion après la destruction de la session et j'ai une idée. Et si, je redirige plutôt vers la page d'accueil? Et voila, la page a été chargée, la session vérifiée (et bien sûr pas là), l'utilisateur redirigé pour se connecter. Problème résolu. 

4
Dan Doyon

Je suis aux prises avec le même problème depuis un certain temps. Ce qui fonctionne pour moi, du moins jusqu’à présent, dans Chrome, FF et IE est le suivant:

1) référencer le fichier manifeste <html lang="nl" manifest="filename.appcache"> De ce que je comprends, cela mettra en cache tout ce qui suit dans ce document HTML. Par conséquent, un fichier manifeste est nécessaire pour éviter que cela ne se produise:

2) utilisez un fichier manifeste filename.appcache avec le contenu suivant, qui dit en gros: pour tous les fichiers, ne lisez pas à partir du cache mais à partir du serveur de réseau: 

CACHE MANIFEST
# 2015-09-25 time 20:33 UTC v 1.01 
NETWORK:
*


3) une troisième étape est requise: chaque fois que vous téléchargez une mise à jour (partielle) de votre site Web, modifiez également le fichier manifeste en modifiant l'horodatage dans la ligne de commentaire (#). Pourquoi? En effet, si vous ne modifiez pas le fichier manifeste, celui-ci ne sera pas lu, il passera par défaut à l'étape 1 et mettra donc en cache et lira à partir du cache. Cependant, le fait que le fichier manifeste soit modifié oblige le fichier manifeste à être relu, et donc que l'instruction "ne pas lire à partir du cache mais à lire sur le serveur de réseau" y est appliquée à nouveau.

3
Gladys

Le réponse précédente peut ne pas fonctionner systématiquement pour empêcher la mise en cache ou pour effacer le cache existant dans Chrome, mais il existe une solution de contournement. 

1) Pour effacer le cache existant en chrome, il peut être nécessaire de mettre à jour tous les fichiers du site Web (par exemple, en créant un lien vers un nouveau fichier css sur chaque page) avec une mise à jour du cache -manifest avant que le cache existant dans chrome ne soit effacé lors de la deuxième visite d'une page (en raison du "déroulement" de la manière dont une page est rendue: la première fois qu'une page est visitée, le navigateur lit et met en cache le manifeste. lors du chargement à partir du cache existant. Le manifeste mis à jour nouvellement stocké n’est lu et appliqué que lors de la deuxième visite). 

2) et si rien de tout cela ne vous aide, il est possible de inclure un script dans le fichier de manifeste lui-même pour rechercher un nouveau manifeste et, le cas échéant, le recharger et utiliser le nouveau manifeste. Cela a résolu le problème et résolu tous les cas restants que j'ai testés pour lesquels les fichiers étaient restés en mémoire cache en permanence. J'ai trouvé ce script sur cette page de Jason Stimpel.

<script type="text/javascript">
window.addEventListener('load', function (e) {
window.applicationCache.addEventListener('updateready', function (e) {
        window.location.reload();
    }, false);
}, false);
</script>
0
Gladys