J'ai un contenu statique sur mon site web pour lequel j'ai configuré la mise en cache (en utilisant Asp.NET MVC). Selon Firebug, la première fois que j'ouvre la page, Firefox envoie cette demande:Pourquoi firefox renvoie-t-il au serveur pour déterminer si mes fichiers sont modifiés?
GET /CoreContent/Core.css?asm=0.7.3614.34951
Host: 127.0.0.1:3916
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/css,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:3916/Edit/1/101
Cookie: .ASPXAUTH=52312E5A802C1A079E2BA29AA2BFBC5A38058977B84452D62ED52855D4164659B4307661EC73A307BFFB2ED3871C67CB3A9AAFDB3A75A99AC0A21C63A6AADE9A11A7138C672E75125D9FF3EFFBD9BF62
Pragma: no-cache
Cache-Control: no-cache
Que mon serveur répond à cette:
Server: ASP.NET Development Server/9.0.0.0
Date: Mon, 23 Nov 2009 18:44:41 GMT
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 1.0
Cache-Control: public, max-age=31535671
Expires: Tue, 23 Nov 2010 18:39:12 GMT
Last-Modified: Mon, 23 Nov 2009 18:39:12 GMT
Vary: *
Content-Type: text/css
Content-Length: 15006
Connection: Close
Jusqu'à présent, si bon. Cependant, si je rafraîchir Firefox (pas un rafraîchissement du cache-compensation, juste une normale un), au cours de ce cycle de rafraîchissement Firefox sera une nouvelle fois sur le serveur avec cette demande:
GET /CoreContent/Core.css?asm=0.7.3614.34951
Host: 127.0.0.1:3916
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/css,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:3916/Edit/1/101
Cookie: .ASPXAUTH=52312E5A802C1A079E2BA29AA2BFBC5A38058977B84452D62ED52855D4164659B4307661EC73A307BFFB2ED3871C67CB3A9AAFDB3A75A99AC0A21C63A6AADE9A11A7138C672E75125D9FF3EFFBD9BF62
If-Modified-Since: Mon, 23 Nov 2009 18:39:20 GMT
Cache-Control: max-age=0
auquel mon serveur répond 304 Not Modified
.
Pourquoi Firefox émet-il cette deuxième requête? Dans la première réponse, j'ai dit que le cache n'expire pas avant un an (j'ai l'intention d'utiliser des paramètres de requête chaque fois que les choses changent). Dois-je ajouter un autre en-tête de réponse pour éviter ce retour supplémentaire?
Modifier: Peu importe que j'appuie sur Actualiser ou que je retourne à la page (ou une URL différente, qui fait référence aux mêmes fichiers externes). Firefox fait de même. Aussi, je ne prétends pas que ce soit un bug dans FF, je me demande juste s'il y a un autre en-tête que je peux définir qui signifie "Ce document ne changera jamais, ne me dérange pas encore".
J'ai remarqué Cache-Control: pas de cache et Cache-Control: pas de cache: max-age = 0 en-têtes dans les requêtes GET. Peut-être que c'est le problème? Selon http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html: Lorsqu'un client essaie de revalider une entrée de cache et que la réponse qu'il reçoit contient un en-tête Date qui semble être plus ancien que l'un Pour l'entrée existante, le client DEVRAIT répéter la demande sans condition, et inclure Cache-Control: max-age = 0 ... – Roman
Merci, mais ces en-têtes sont envoyés par FF. La question est de savoir s'il y a quelque chose que je peux faire sur le serveur pour me dire "Fais-moi confiance, ce fichier ne changera jamais, s'il te plaît, ne me dérange plus." – erikkallen
Puis-je vous demander pourquoi vous ne mentionnez que FireFox mais pas les autres navigateurs? Avez-vous résolu le problème décrit avec ces autres navigateurs ou vous vous en fichez du tout? Vraiment dire que je suis également intéressé par ce comportement "cache forever", s'il existe. Merci. – Roman