J'ai un gestionnaire personnalisé qui renvoie une image au navigateur.Pourquoi ma mise en cache d'image personnalisée n'est-elle pas disponible dans le navigateur?
Les images sont extraites d'une base de données.
Pour une raison quelconque les images ne sont pas mises en cache par le navigateur, et je me demandais si quelqu'un pourrait être en mesure de repérer ce que je suis absent du code ci-dessous:
HttpContext.Current.Response.BinaryWrite(imageBytes);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
Context.Current.Response.Cache.SetAllowResponseInBrowserHistory(true);
if(imgRepGetCache.DateCached.HasValue)
HttpContext.Current.Response.Cache.SetLastModified(imgRepGetCache.DateCached.Value);
HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddDays(2));
HttpContext.Current.Response.ContentType = "image/jpeg";
Ou bien si je suis manquant complètement le point en quelque sorte et il y a un autre endroit où je dois regarder.
Edit: selon la demande pour plus d'informations:
- L'URL est toujours le même
- Je teste le chargement du même fichier via le tuyau standard IIS et ma pipe dans le même navigateur sur la même PC. Celui qui charge via IIS est normalement mis en cache, mon fichier ne l'est pas.
Edit 2: Après avoir inspecté les requêtes HTTP/réponses sur la route IIS normale, je pense qu'il a quelque chose à voir avec le ETag. Le ETag (que je suis nouveau à partir de maintenant) semble être une sorte de checksum pour le document. Lors de demandes ultérieures par un navigateur, l'ETag est envoyé et si le serveur trouve que l'ETag n'a pas changé, il renvoie un 304 - Non Modifié. Tout bon! Mais je suis en train de paramétrer l'ETag en utilisant:
HttpContext.Current.Response.Cache.SetETag(imgRepGetCache.DateCached.ToString());
Mais cela n'apparaît pas dans la réponse. Plus près ...
Édition 3: Je l'ai résolu à la fin après avoir profité de Firebug pour un peu d'amusement inspectant HTTP. J'ai posté ma solution ci-dessous.
Vous devriez publier plus d'informations. Parfois, les navigateurs ne sont pas mis en cache en fonction de l'URL de la page ou des métadonnées associées à la page en cours de rendu, ou même en raison de paramètres locaux. – Kieveli
Certains (je ne sais pas lequel) ne mettra pas non plus en cache les pages basées sur des suffixes, ie. ils ne mettront pas en cache les pages php, car elles sont connues pour être des contenus dynamiques. –
Point très utile à faire! Je me souviendrai de cela pour tous les futurs f *** s de la mise en cache. – joshcomley