OVH Cloud OVH Cloud

désactiver le cache web

13 réponses
Avatar
Scetbon Cyril
Salut,

j'ai un cgi qui doit se connecter à une base et permettre de supprimer
unitairement des lignes.
Cependant, lorsque je supprime une ligne et qu'il m'affiche le reste des
lignes si j'utilise le bouton retour du naviguateur il me réaffiche l'
ancienne ligne (soit n+1 lignes avec n le nombre de lignes après la
suppression).
J'ai donc essayé de désactiver le cache web car le cgi n'est pas
réexécuté lorsque le bouton retour est utilisé.
Voilà comment j'ai tenté de faire ça :

use strict;
use CGI qw(:standard);
use DBI;

print header(-expires=>'now'),start_html(-title=>'Fichier
journal',-style=>{'src'=>'../format.css'},-head=>[
journal',-style=>{'src'=>'../format.css'},-head=>[
meta({-http_equiv=>'Pragma', -content=>'no-cache'}),
meta({-http_equiv => 'Content-Type', -content=>'text/html'}),
meta({-http_equiv=>'expires',-content=>'0'})]);
print h1({-class=>'title'},'Journal des sauvegardes');
print br;
my $dbh= DBI->connect(....

Mais la page web est cachée !!!

Je précise que j'utilise le module Apache::Registry mais si j'ai compris
il ne cache que le code afin de ne pas le compiler à chaque fois.

Une idée ?

Merci

10 réponses

1 2
Avatar
Jacques Caron
Salut,

On Thu, 30 Jun 2005 21:48:27 +0200, Scetbon Cyril
wrote:

meta({-http_equiv=>'Pragma', -content=>'no-cache'}),
meta({-http_equiv => 'Content-Type', -content=>'text/html'}),
meta({-http_equiv=>'expires',-content=>'0'})]);


Plutôt que de mettre tout ça en meta dans le HTML, ce serait plus opportun
de tout mettre sous forme de header HTTP. Et un petit Cache-Control:
no-cache, must-revalidate ça peut être utile aussi. De même qu'un Expires
correctement formaté.

Mais la page web est cachée !!!


Quand on fait un "back" tous les navigateurs ne se comportent pas
forcément de la même façon. Certaines pages seront cachées par Opera alors
qu'IE les rechargera par exemple... Je ne suis pas sûr qu'on puisse forcer
à 100% un rechargement dans tous les navigateurs dans ce cas...

Jacques.

Avatar
Scetbon Cyril
Jacques Caron wrote:

Salut,

On Thu, 30 Jun 2005 21:48:27 +0200, Scetbon Cyril
wrote:

meta({-http_equiv=>'Pragma', -content=>'no-cache'}),
meta({-http_equiv => 'Content-Type', -content=>'text/html'}),
meta({-http_equiv=>'expires',-content=>'0'})]);



Plutôt que de mettre tout ça en meta dans le HTML, ce serait plus
opportun de tout mettre sous forme de header HTTP.


En fait j'ai essayé les 2 manières.

Et un petit Cache-Control: no-cache, must-revalidate ça peut être
utile aussi. De même qu'un Expires correctement formaté.


Il faut que je le teste


Mais la page web est cachée !!!



Quand on fait un "back" tous les navigateurs ne se comportent pas
forcément de la même façon. Certaines pages seront cachées par Opera
alors qu'IE les rechargera par exemple... Je ne suis pas sûr qu'on
puisse forcer à 100% un rechargement dans tous les navigateurs dans
ce cas...

Jacques.




Avatar
Nicolas George
"Jacques Caron" wrote in message :
Quand on fait un "back" tous les navigateurs ne se comportent pas
forcément de la même façon. Certaines pages seront cachées par Opera alors
qu'IE les rechargera par exemple... Je ne suis pas sûr qu'on puisse forcer
à 100% un rechargement dans tous les navigateurs dans ce cas...


User agents often have history mechanisms, such as "Back" buttons and
history lists, which can be used to redisplay an entity retrieved
earlier in a session.

History mechanisms and caches are different. In particular history
mechanisms SHOULD NOT try to show a semantically transparent view of
the current state of a resource. Rather, a history mechanism is meant
to show exactly what the user saw at the time when the resource was
retrieved.

(RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1)

En français : c'est normal de ne pas recharger pour un « back », c'est prévu
pour.

Avatar
cyril.scetbon
sauf que j'ai une application web faite en php qui lorsque j'utilise le
back button me réactualise la vue avec les données courante.
Cela doit donc fonctionner pour moi de la même manière.

Je pose cette question avant de me plonger dans les sources de
l'application.

Merci.
Avatar
Daniel Schmitt
sauf que j'ai une application web faite en php qui lorsque j'utilise le
back button me réactualise la vue avec les données courante.
Cela doit donc fonctionner pour moi de la même manière.


comme cela ne respecte pas les RFC, tu ne peux donc pas t'appuyer dessus
même avec IE dont la V7 pourrait bien corriger ce bug.
Pourquoi ne pas créer un bouton back dans ton appli qui fait ce que tu
veux ?

Avatar
cyril.scetbon
Je pourrais, mais je voudrais gérer le cas où l'utilisateur suit son
premier réflexe et presse ce bouton.
Avatar
Jul
avait énoncé :
Je pourrais, mais je voudrais gérer le cas où l'utilisateur suit son
premier réflexe et presse ce bouton.


Peut-être JavaScript permet-il une utilisation conditionnelle de
l'historique (si il existe une page en cache suivant la page actuelle,
faire rafraichir la vue, sinon, laisser tel quel, quoi qu'il faut
encore que la page suivante s'efface de l'hitorique après
rafraichissement).

C'est vrai que cette notion d'historique n'est pas comprise par tout le
monde de la même manière, et en premier lieu par l'utilisateur non
informaticien qui représente la majorité des visiteurs.

--
Jul... réapparru comme par enchantement

Avatar
Jacques Caron
Salut,

On 1 Jul 2005 01:12:07 -0700, wrote:

sauf que j'ai une application web faite en php qui lorsque j'utilise le
back button me réactualise la vue avec les données courante.


Avec tous les browsers, ou juste IE? IE a tendance à réactualiser tout ce
qu'il peut tout le temps, alors qu'Opera par exemple ne le fera pas.

Si ça marche dans tous les cas, c'est probablement du Javascript, mais là
encore la gestion des BODY ONLOAD et autres joyeusetés n'est pas forcément
exactement identique sur tous les browsers.

http://www.quirksmode.org/js/events_compinfo.html#interface

J'avoue que je ne sais pas trop comment forcer ce reload à coup sûr dans
Opera, tiens.

Jacques.

Avatar
cyril.scetbon
Je crois que je vais lire les sources :-)

Merci à tous
Avatar
Nicolas George
"" wrote in message
:
Je pourrais, mais je voudrais gérer le cas où l'utilisateur suit son
premier réflexe et presse ce bouton.


Et si l'utilisateur, comme moi, ouvre toujours de nouveaux tabs plutôt que
de simplement suivre les liens, et revient à la page simplement en la
ressortant de derrière les autres ?

C'est fondamentalement voué à l'échec, comme architecture.

1 2