web-dev-qa-db-fra.com

Quelle est la différence entre no-cache et no-store dans Cache-control?

Je ne trouve pas la différence pratique entre Cache-Control:no-store et Cache-Control:no-cache.

Pour autant que je sache, no-store signifie qu'aucun périphérique de cache n'est autorisé à mettre en cache cette réponse. D'un autre coté, no-cache signifie qu'aucun périphérique de cache n'est autorisé à diffuser une réponse mise en cache sans la valider au préalable avec la source. Mais à quoi sert cette validation? Obtention conditionnelle?

Que faire si une réponse a no-cache, mais il n'a pas de Last-Modified ou ETag?

Cordialement.

34
vtortola

Mais de quoi s'agit-il?

Vérification exacte Last-Modified ou ETag. Le client demanderait au serveur s'il a une nouvelle version de données utilisant ces en-têtes et si la réponse est non, il servira les données mises en cache.


Mettre à jour

De RFC

no-cache
    If the no-cache directive does not specify a field-name, then a cache MUST NOT use
 the response to satisfy a subsequent request without successful revalidation with the
 Origin server. This allows an Origin server to prevent caching even by caches that   
 have been configured to return stale responses to client requests. 
22
Alex Gitelman
68
Pruthviraj

Comme vous l'avez identifié, pas de cache ne signifie pas qu'il n'y a jamais de mise en cache, mais plutôt que l'agent utilisateur doit toujours demander au serveur s'il est d'accord pour utiliser ce qu'il a mis en cache. En revanche, no-store dit de ne même pas conserver de copie, ce qui signifie qu'il n'y a rien à demander. Si vous connaissez la réponse à "Puis-je réutiliser cela?" est toujours non, vous obtenez une amélioration des performances en ignorant la validation du cache et en économisant de la place dans le cache pour d'autres données.

Outre les performances, il existe une différence de comportement avec l'historique du navigateur . La section HTTP 1.1 13.1 dit que "le délai d'expiration ne s'applique pas aux mécanismes d'historique". L'en-tête no-cache décrit l'expiration et ne s'applique donc pas aux mécanismes d'historique tels que le bouton de retour. Ainsi, l'utilisateur peut revenir en arrière vers une page précédente sans cache sans que le serveur soit contacté.

L'en-tête no-store, d'autre part, empêche les données d'être stockées en dehors d'une session, auquel cas elles ne sont tout simplement pas disponibles pour un mécanisme d'historique à utiliser. Avec no-store, si l'utilisateur termine sa session en naviguant vers un autre domaine, puis revient en arrière, la seule façon pour le navigateur de savoir quoi afficher est d'obtenir à nouveau la page initiale du serveur.

Voici comment un problème de chrome sur ce sujet fait la distinction:

no-cache ne signifie pas "ne pas mettre en cache cela" (ce serait pas de stockage). no-cache signifie ne pas l'utiliser pour des charges normales, sauf si la ressource est revalidée pour la fraîcheur. Les navigations d'historique ne sont pas des charges normales.

10
Edward Brey