web-dev-qa-db-fra.com

Utilisation de balises <meta> pour désactiver la mise en cache dans tous les navigateurs?

J'ai lu que lorsque vous n'avez pas accès aux en-têtes du serveur Web, vous pouvez désactiver le cache en utilisant:

<meta http-equiv="Cache-Control" content="no-store" />

Mais j'ai aussi lu que cela ne fonctionnait pas dans certaines versions d'IE. Existe-t-il un ensemble de balises <meta> qui désactiverait le cache dans tous les navigateurs?

424
leeand00

Pour les navigateurs Web modernes (après IE9)

Voir la copie en haut de la page pour des informations correctes!

Voir la réponse ici: Comment contrôler la mise en cache des pages Web sur tous les navigateurs?


Pour IE9 et avant

Ne pas copier aveuglément coller ceci!

La liste n'est que des exemples de techniques différentes, elle n'est pas destinée à une insertion directe. Si copié, le second écraserait le premier et le quatrième écraserait le troisième à cause des déclarations http-equiv ET échouerait avec le validateur W3C. Tout au plus pourrait-on avoir une déclaration de chaque type http-equiv; pragma, cache-control et expire. Ceux-ci sont complètement obsolètes lors de l'utilisation de navigateurs modernes et à jour. Après IE9 quand même. Chrome et Firefox, en particulier, ne fonctionnent pas avec ceux-ci comme prévu, voire jamais.

<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<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" />

En fait, ne les utilisez pas du tout!

Les en-têtes de cache ne sont pas fiables dans les méta-éléments; D'une part, tout proxy Web entre le site et l'utilisateur l'ignorera complètement. Vous devez toujours utiliser un véritable en-tête HTTP pour les en-têtes tels que Cache-Control et Pragma.

696
user159088

Ceci est un lien vers une grande étude de cas sur l'incompréhension de l'industrie du contrôle des caches.

http://securityevaluators.com/knowledge/case_studies/caching/

En résumé, selon cet article, seul Cache-Control: no-store est reconnu par Chrome, Firefox et IE. IE reconnaît les autres contrôles, mais pas Chrome et Firefox.

76
Paul

Cela ne fonctionne pas dans IE5, mais ce n'est pas un gros problème.

Cependant, les en-têtes de cache ne sont pas fiables dans les méta-éléments; D'une part, tout proxy Web entre le site et l'utilisateur l'ignorera complètement. Vous devez toujours utiliser un véritable en-tête HTTP pour les en-têtes tels que Cache-Control et Pragma.

24
bobince

J'ai remarqué des problèmes de mise en cache lors d'appels de service lors de la répétition du même appel de service (longue interrogation). L'ajout de métadonnées n'a pas aidé. Une solution consiste à passer un timestamp pour s'assurer que ie pense qu'il s'agit d'une autre demande de service http. Cela a fonctionné pour moi, donc ajouter un fragment de code de script côté serveur pour mettre à jour automatiquement cette balise ne ferait pas de mal:

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

6
user1496767

pragma est votre meilleur pari:

<meta http-equiv="Pragma" content="no-cache">
6
Kshitij Saxena -KJ-