Forcer remise en cache d'une image

Seraph

WRInaute occasionnel
Bonjour,
Je viens de terminer un script pour mettre un avatar sur son profil.
J'ai donc un formulaire d'upload classique qui envoie vers une page qui se charge du boulot à faire côté serveur et qui, une fois terminé, renvoie sur la page de profil via des headers.
Le problème c'est que je supprime l'ancien avatar pour y remettre le nouveau avec le même nom, ce qui fait que le navigateur garde l'ancien en cache pendant au moins deux affichages. C'est pas un très gros problème, sauf que le site affiche que l'avatar à bien été modifié alors que ça affiche le même qu'avant, donc c'est pas très crédible et j'ai pas envi que les gens re-upload le nouvel avatar plusieurs fois à cause de ça.
Je voulais donc savoir si il y a moyen, côté code, de forcer la remise en cache de l'image.

Merci,
Nicolas.
 

Topsitemaker

WRInaute impliqué
Seraph a dit:
Bonjour,
Je viens de terminer un script pour mettre un avatar sur son profil.
J'ai donc un formulaire d'upload classique qui envoie vers une page qui se charge du boulot à faire côté serveur et qui, une fois terminé, renvoie sur la page de profil via des headers.
Le problème c'est que je supprime l'ancien avatar pour y remettre le nouveau avec le même nom, ce qui fait que le navigateur garde l'ancien en cache pendant au moins deux affichages. C'est pas un très gros problème, sauf que le site affiche que l'avatar à bien été modifié alors que ça affiche le même qu'avant, donc c'est pas très crédible et j'ai pas envi que les gens re-upload le nouvel avatar plusieurs fois à cause de ça.
Je voulais donc savoir si il y a moyen, côté code, de forcer la remise en cache de l'image.

Merci,
Nicolas.

Bonjour,
j'ai une méthode simple pas trop propre mais ça marche

<img src='image.gif?toto=123' />
où 123 est un numéro au hasard

voilà
 

Bool

WRInaute passionné
Hello,

le soucis c'est qu'avec un numéro aléatoire tu interdis toute mise en cache ; dans le cas des avatars d'un forum, ça peut vite être catastrophique.

L'idéal selon moi c'est d'insérer le timestamp de l'image dans l'URL : cela fait un "accès disque", mais de toutes façons sans ça c'est Apache qui ferait cet accès disque.

Ainsi l'URL ne change que si l'image change vraiment. Reste encore un soucis : pour le coup seuls IE et Firefox gèrent le cache pour ces URL.

Arrive alors la solution du rewriting, l'idée étant de prendre en charge les URL du genre :
Code:
/avatars/u/n/unmembre.123456789.jpg

Reste à ajouter un coup de mod_expires avec un délai assez long (j'ai opté pour 30 jours pour ma part) pour éviter que le navigateur ne demande sans arrêt confirmation pour le cache de l'image. Et ton serveur Web ne s'en portera que mieux.
 

ecocentric

WRInaute accro
plutôt que mettre un numéro aléatoire, tu peux en mettre un basé sur l'année / mois / jour / heure / seconde en fonction de la fréquence de rafraîchissement que tu souhaites.
 

Seraph

WRInaute occasionnel
Ce que j'ai fait c'est que j'ai rajouté le ?toto=123 seulement sur l'image qui s'affiche après validation, sur le forum je laisse bien évidemment l'image d'origine sans paramètre vu que dès qu'on change de page le cache de l'image se refait !
Mais c'est vrai que c'est utile de le préciser ! ;)
 

ecocentric

WRInaute accro
Seraph a dit:
Peut être mais ça agira aussi sur tout le design du site ! ;)
de mémoire, ya une instruction de cache dans le header http.
faut voir si tu sais pas le paramétrer quand tu envoies l'image (si l'image est un .php).
 

Discussions similaires

Haut