Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjours , je vais aller droit au but
j'ai des images que je charge en appelant un service ( qui me renvoi un flux )
Pour appeler ce service l'url de l'image est :
<img src="moncontroller/monservice/imageid/10" />
par exemple ...
Le navigateur ne met JAMAIS en cache cette url et donc le cache que je génère coté serveur ne sert pas a grand chose ...
Question il y a t-il moyen de réécrire l'url par exemeple :
<img src="moncontroller/monservice/imageid-10.jpg" />
??
merci à tous
Hors ligne
Personnellement plutôt que de modifier mon url, je regarderais plutôt du côté des entêtes http et notamment des entêtes Expires et Cache-Control.
Hors ligne
J'ai déja essayé en renvoyant un entête 304 ( non modifié ) et le flux , tout ceci est bien récupéré par le navigateur , mais avec un point d’arrêt je me rend compte que mon controller / action est toujours appelé malgrès ça et non mis en cache dans le navigateur ....
Hors ligne
Je pensais plutôt aux entêtes lors de la première génération de l'image pour éviter justement les nouveaux appels. Si tu indiques dans Expires que ton image n'expire jamais (date expire dans 1 an par exemple), alors si l'image est présente dans le cache du navigateur alors il ne la demandera plus au serveur.
Hors ligne
justement l'url de mon image étant : <img src="moncontroller/monservice/imageid/10" /> et non un fichier directement , quelque soit l'entête que je renvois , le controller est toujours appelé
Hors ligne
C'est justement dans le controlleur que tu dois modifier les entêtes avec un code du genre :
[lang=php] $this->getResponse()->setHeader('Expires', 'Tue, 01 Jan 2013 00:00:00 GMT'); $this->getResponse()->setHeader('Cache', 'no-cache');
Hors ligne
action est toujours appelé malgrès ça et non mis en cache dans le navigateur ....
Hors ligne
J'ai trouvé une solution simpliste de mettre en cache des ressources.
Sur mon site d'alerte LeBonCoin, on peut créer des flux RSS. Mais, pour éviter les abus, je met en cache les flux pendant 20 minutes.
Avec Zend Framework, tu dois avoir un htaccess où tu as :
RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule .* - [NC,L] RewriteRule .* index.php [NC,L]
Ces règles permettent de ne pas rediriger les fichiers physique vers index.php.
Mes flux sont de la forme : /feed/refresh/id/ff335ab42043d3b4d1a25727de0ca11234567890.rss
J'ai donc créé dans mon répertoire public (où se trouve index.php) l'arbre suivant : feed/refresh/id
Quand le navigateur demande le fichier RSS, il va être redirigé la première fois vers mon controller Feed et l'action refresh. Je génère à ce moment le cache dans feed/refresh/id.
À la seconde requête, la redirection ne se fait pas puisque qu'il y a le fichier physique dans feed/refresh/id.
Ensuite, une simple tache cron permet de supprimer les fichiers vieux de plus de 20 minutes.
Et le tour est joué
Dernière modification par Blount (17-04-2012 09:08:26)
Hors ligne