Existe-t-il un moyen de désactiver la mise en cache du navigateur client pour des sites Web spécifiques?

10

Il s'agit d'une question indépendante du navigateur, mais nous testons avec IE9.

L'une des applications Web visitées par nos utilisateurs est mise en cache de manière aléatoire et les modifications n'apparaissent pas quand elles le devraient. Aucun autre site n'a ce problème et nous avons travaillé avec le fournisseur qui prétend que cela n'arrive à personne d'autre. Si nous utilisons la barre d'outils du développeur et sélectionnons «forcer l'actualisation à partir du serveur», tout est mis à jour correctement.

Au lieu de vraiment résoudre le problème, nous pensons à le contourner en désactivant le cache pour ce site spécifique. Cependant, nous ne savons pas comment.

GollyJer
la source

Réponses:

10

La seule manière appropriée de désactiver la mise en cache du navigateur est d'utiliser les en-têtes HTTP de la webapp elle-même. L'en-tête HTTP 1.1 "Cache-Control" seul devrait suffire pour tout navigateur post-2000. Mais pour une protection supplémentaire, le serveur peut émettre les en-têtes HTTP 1.1 "Cache-Control" et HTTP 1.0 "Expires" ensemble .

Une façon hack'ish mais parfois vue de gérer l'invalidation du cache est une chaîne "cachebuster" dans les URL du serveur. Le cachebuster est souvent basé sur l'horodatage et est ajouté en tant que chaîne de requête à chaque lien HTML pour rendre l'URL unique et utilisée une seule fois. Quelque chose comme http://example.org/filename.html?cb=<timestamp+random_value>. C'est moche, et ne fait rien de mieux que les en-têtes HTTP. Mais il pourrait être utilisé comme hack pour un public limité (fx sur un intranet), ou comme couche de protection supplémentaire avec des en-têtes HTTP appropriés.

AFAIK il n'existe aucun moyen de désactiver sélectivement la mise en cache pour un seul site uniquement à partir d'Internet Explorer. Une solution (sanglamment compliquée) pourrait être d'installer le cache Varnish comme cache intermédiaire sur votre réseau local, de configurer Internet Explorer pour utiliser Varnish comme proxy HTTP et d'utiliser le langage VCL sur Varnish pour réécrire les en-têtes HTTP pour ce site spécifique uniquement.

Honnêtement, je pense que votre fournisseur fait une erreur ici. Je suggère d'installer Fiddler2 pour IE ou Firebug pour Firefox et de regarder les en-têtes HTTP réels que la webapp envoie. Correlez cela avec le tutoriel de mise en cache de Mark Nottingham auquel j'ai déjà lié ci-dessus - je suppose que les en-têtes permettent la mise en cache, ou du moins n'interdisent pas expressément la mise en cache.

Jesper M
la source
0

Assurez-vous de définir les en-têtes d'expiration appropriés. Si vous mettez l'heure dans le passé, le contenu ne sera pas mis en cache. Vérifiez l'heure / la date sur le poste de travail sur lequel IS9 s'exécute. Voir aussi: http://www.mnot.net/cache_docs/

Mircea Vutcovici
la source
0

Si vous ne pouvez pas modifier le contenu du site Web en question, vous pouvez utiliser un serveur proxy pour modifier le contenu en route vers votre navigateur. Cela vous permettrait de modifier les en-têtes expirés.

JeffG
la source
0

Si le site Web vous permet de vous connecter via HTTPS, en fonction de votre navigateur, vous pouvez désactiver la mise en cache des pages cryptées.

Dans IE, cela peut se faire ainsi:

Vous pouvez vérifier les paramètres d'IE dans Options Internet-> Avancé-> Sécurité-> Ne pas enregistrer les pages cryptées sur le disque.

JeffG
la source
Il a demandé une solution indépendante du navigateur.
Mircea Vutcovici
1
Ce @Mircea EST un navigateur solution agnostique. Je viens de fournir un exemple gratuit en utilisant IE. De nombreux autres navigateurs ont une option pour désactiver la mise en cache SSL, mais les paramètres sont à des endroits différents.
JeffG
0
<meta http-equiv="PRAGMA" content="NO-CACHE">

http://www.zann-marketing.com/developer/20051018/stop-browser-caching-using-meta-tags.html

Vous pouvez envisager d'utiliser des clés aléatoires dans la barre d'URL, cela empêchera également la mise en cache dans le navigateur.

Richard
la source
Cela fonctionnerait, SI GollyJer avait la possibilité de modifier le site Web. Je suppose qu'il ne se fonde pas sur sa question.
JeffG
Pour être précis, les "clés aléatoires" n'empêchent pas efficacement la mise en cache. Le navigateur et les caches intermédiaires peuvent toujours stocker la réponse sur le disque. Mais la prochaine fois que le même fichier sera demandé, la clé aléatoire rendra l'URL différente, et donc la version en cache sur le disque ne sera pas utilisée. Une nouvelle représentation sera téléchargée à partir du serveur et éventuellement mise en cache sur le disque. De plus, la balise META PRAGMA est ancienne et ne doit pas être utilisée - la recommandation est d'utiliser les en-têtes HTTP Expires et Cache-Control.
Jesper M