J'ai un fichier CSS généré dynamiquement. C'est assez grand et a un contenu différent pour les différents navigateurs. Cela change très rarement.Pourquoi mes pages aspx ne sont-elles pas mises en cache sur le client?
Ainsi, en haut de la .aspx
la page je:
<%@ OutputCache Duration="86400"
Location="ServerAndClient"
VaryByParam="none"
VaryByCustom="browser" %>
J'ai une directive similaire contre les actions MVC qui génèrent des images dynamiques:
[OutputCache(Duration = 86400,
VaryByParam = "none",
Location = OutputCacheLocation.ServerAndClient)]
Cela devrait se traduire par le fichier mise en mémoire cache sur le serveur et le client (mais pas les intermédiaires intermédiaires) pour une journée.
Les en-têtes de réponse semblent corrects:
HTTP/1.1 200 OK
Cache-Control: private, max-age=83831
Content-Type: text/css; charset=utf-8
Expires: Wed, 09 Jun 2010 08:52:45 GMT
Last-Modified: Tue, 08 Jun 2010 08:52:45 GMT
Vary: *
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Tue, 08 Jun 2010 09:35:34 GMT
Content-Length: 70073
La mise en cache fonctionne côté serveur - autres requêtes n'exécutent pas le code.
Toutefois, la mise en cache côté client est rompue de deux manières différentes: tout d'abord, le contenu est à nouveau demandé sur chaque page, en dépit du fait qu'il doit être mis en cache.
Pourquoi le navigateur demande-t-il de nouveau le contenu?
Deuxièmement, lorsque le serveur demande de nouveau le contenu, il renvoie un HTTP 200 ainsi que tout le contenu. Il doit renvoyer un HTTP 304 non modifié sans indiquer au navigateur de réutiliser ce qu'il a déjà téléchargé.
Comment puis-je m'assurer qu'il renvoie un HTTP 304 lorsque le contenu n'a pas changé?
Cheers - ressemble que 'varient: *' tête était la raison pour laquelle IE n'a pas cache fixe en ajoutant ' ' sur le Web (encore un autre bug IE!) .config –
Keith
Le client n'envoie pas d'en-tête de requête 'If-None-Match' - probablement parce qu'il n'y a pas de' ETag' dans la réponse. – Keith
Il pourrait envoyer un If-Modified-Since, mais bien sûr fournir un ETag est préférable de toute façon. –