Quelle est la valeur par défaut de cache-control?

mon problème est: parfois le navigateur sur-cache certaines ressources, même si je les ai déjà modifiées. Mais après F5, tout va bien.

<!-J'ai étudié cette affaire Tout l'après-midi. Maintenant j'ai complètement compris le point de " Last-Modified "ou"Cache-Control". Et je sais comment résoudre mon problème (juste .js?version ou max-age explicite = xxxx). Mais l' problème n'est toujours pas résolue: comment navigateur gérer l'en-tête de réponse sans "Cache-Control" comme ceci:

Content-Length: 49675
Content-Type: text/html
Last-Modified: Thu, 27 Dec 2012 03:03:50 GMT
Accept-Ranges: bytes
Etag: "0af7fcbdee3cd1:972"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Thu, 24 Jan 2013 07:46:16 GMT 

ils les mettent clairement en cache quand "entrer dans la barre"

enter image description here

37
demandé sur rhapsodyn 2013-01-24 12:17:48

5 réponses

RFC 7234 détails quels sont les navigateurs et les procurations doivent le faire par défaut:

bien que la mise en cache soit une fonctionnalité entièrement optionnelle de HTTP, elle peut être on suppose qu'il est souhaitable de réutiliser une réponse mise en cache et qu'une telle réutiliser est le comportement par défaut quand aucune exigence ou locale la configuration l'empêche. Par conséquent, les exigences relatives au cache HTTP sont les suivantes: vise à empêcher un cache de stocker un non réutilisable réponse ou la réutilisation d'un stock réponse inappropriée, plutôt que exiger que les caches stockent et réutilisent toujours des réponses particulières.

14
répondu SilverlightFox 2017-04-22 08:52:42

l'en-tête cache-control par défaut est:Privé

un mécanisme de cache peut mettre cette page en cache dans un cache privé et ne la renvoyer qu'à un seul client. C'est la valeur par défaut. la plupart des serveurs mandataires ne cache pas les pages avec ce paramètre.

consultez http://msdn.microsoft.com/en-us/library/ms524721%28v=vs.90%29.aspx

9
répondu Stevie 2015-11-02 16:56:22

La mise en cache est habituellement activée par défaut dans les browers, donc cache-control peut être utilisé pour personnaliser ce comportement ou de la désactiver.

bien que la mise en cache soit une fonctionnalité entièrement optionnelle de HTTP, on peut supposer que la réutilisation d'une réponse mise en cache est souhaitable et qu'une telle réutilisation est le comportement par défaut quand aucune exigence ou configuration locale ne l'empêche. Par conséquent, les exigences de cache HTTP visent à empêcher un cache de stocker une réponse non réutilisable ou réutiliser une réponse stockée de façon inappropriée, plutôt que d'exiger que les caches stockent et réutilisent toujours des réponses particulières. [https://tools.ietf.org/html/rfc7234#section-2]

Le temps le navigateur considère une réponse en cache fraîche est généralement par rapport à la date de la dernière modification:

étant donné que les serveurs d'origine ne fournissent pas toujours des temps d'expiration explicites, un cache peut attribuer un temps d'expiration heuristique lorsqu'un temps explicite n'est pas spécifié, en utilisant des algorithmes qui utilisent d'autres valeurs de champ d'en-tête (comme le dernier temps modifié)... Si le champ d'en-tête de la réponse a été modifié en dernier lieu (Section 2.2 de [RFC7232]), les caches sont encouragées à utiliser une valeur d'expiration heuristique qui n'est pas supérieure à une fraction de l'intervalle écoulé depuis ce temps. Un décor typique de cette fraction pourrait être de 10%. [https://tools.ietf.org/html/rfc7234#section-4.2.2]

Ce post a des détails sur la façon dont les différents navigateurs calculer cette valeur.

8
répondu Jon 2017-05-23 12:26:10

la durée de vie de la fraîcheur est calculée à partir de plusieurs en-têtes. Si un en-tête "Cache-control: max-age=N" est spécifié, alors la durée de fraîcheur est égale à N. Si cet en-tête n'est pas présent, ce qui est très souvent le cas, il est vérifié si un en-tête Expires est présent. Si un en-tête Expires existe, alors son moins la valeur de l'en-tête Date détermine la durée de fraîcheur. Enfin, si aucun en-tête n'est présent, cherchez un en-tête Last-Modified. Si cet en-tête est présent, alors le la durée de vie de fraîcheur du cache est égale à la valeur de l'en-tête Date moins la valeur de l'en-tête Last-modified divisée par 10.

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching_FAQ

1
répondu kouut 2017-01-18 08:32:30

sans l'en-tête de contrôle de cache, le navigateur demande la ressource chaque fois qu'il charge un nouveau(?) page. Frapper F5 vous invalider (ou même logiquement supprimer) n'importe quel élément caché dans cette page forçant le rechargement complet en agissant comme aucune version locale n'est disponible - Je ne suis pas sûr si le navigateur enlève ces ressources de cache avant de Les demander à nouveau.

Le plus drôle, c'est qu'il y a quelques autres paramètres dans certains navigateurs, qui provoquent des optimisations comme demande d'une ressource une seule fois par chargement de page. Si vous avez une image qui change à chaque demande comme un compteur, vous verrez qu'une version de cette image, même si vous l'utilisez plusieurs fois.

la suivante est que le navigateur réutilise des images qui ne sont pas explicitement définies comme des nocaches en appliquant une sorte de cache local "préferé". Si vous voulez avoir une demande chaque fois que vous en avez besoin pour revalider et définir expiré à -1 ou quelque chose comme ça.

Donc selon la ressource spécifiant rien déclenche souvent des défauts qui ne sont pas les mêmes que vous attendez de la lecture des spécifications.

Il peut aussi y avoir un comportement différent quant à savoir si la source semble être locale, un lecteur ou un serveur Internet vraiment distant. Tous les navigateurs n'agissent pas de la même manière et je suis assez limité.

ce qui aide est de vérifier www.google.com et rechercher le pixel de suivi de leurs demandes de page (deux 1x1 pixel demandé de metrics.gstats.com avec partie aléatoire sur le sous-domaine).

si vous utilisez firebug pour vérifier l'en-tête, vous voyez qu'ils spécifient les directives nocache de n'importe quelle manière possible. L'en-tête se lit comme ceci:

Alternate-Protocol  443:quic
Cache-Control   no-cache, must-revalidate
Content-Length  35
Content-Type    image/gif
Date    Mon, 25 Nov 2013 14:33:30 GMT
Expires Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified   Tue, 14 Aug 2012 10:47:46 GMT
Pragma  no-cache
Server  sffe
X-Content-Type-Options  nosniff
X-Firefox-Spdy  3
X-XSS-Protection    1; mode=block

essayez ceci comme paramètre et vérifiez si cela résout le problème que le navigateur n'a pas récupéré vos ressources modifiées. La directive must-revalidate causera même des caches de proxy pour demander une ressource à chaque fois et vérifier pour 304 Not Modified réponse.

je ressens actuellement quelque chose de similaire. J'ai une connexion localhost qui configure l'etag et tout ce qui se passe c'est que le cache ne demande jamais. Je n'ai pas mis en cache des informations ou les mêmes. Seul spécifiant un seams etag pour faire en sorte que FireFox ne requière plus la ressource. Donc j'ai vécu quelque chose de similaire à votre problème.

0
répondu Martin Kersten 2013-11-25 21:21:13