On me dit d'éviter les fuites d'informations sur l'utilisateur, seul le "no-cache" en réponse ne suffit pas. "no-store" est également nécessaire.
Cache-Control: no-cache, no-store
Après avoir lu cette spécification http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html , je ne sais toujours pas pourquoi.
Ma compréhension actuelle est que c'est juste pour le serveur de cache intermédiaire. Même si "no-cache" est en réponse, le serveur de cache intermédiaire peut toujours enregistrer le contenu dans un stockage non volatile. Le serveur de cache intermédiaire décidera d'utiliser ou non le contenu enregistré pour la demande suivante. Cependant, si "no-store" est dans la réponse, le serveur de cache intermédiaire n'est pas censé stocker le contenu. Donc, c'est plus sûr.
Y a-t-il une autre raison pour laquelle nous avons besoin à la fois de "no-cache" et de "no-store"?
no-cache
ne veut pas dire ce que vous pensez qu'il fait. En fait, cela signifie «veuillez revalider».Réponses:
Je dois préciser que
no-cache
cela ne signifie pas ne pas mettre en cache . En fait, cela signifie «revalider avec le serveur» avant d'utiliser toute réponse mise en cache que vous pourriez avoir, à chaque demande.must-revalidate
, d'autre part, n'a besoin de revalider que lorsque la ressource est considérée comme périmée.Si le serveur dit que la ressource est toujours valide, le cache peut répondre avec sa représentation, ce qui évite au serveur de renvoyer la ressource entière.
no-store
est effectivement la directive full do not cache et vise à empêcher le stockage de la représentation sous quelque forme de cache que ce soit.Je dis quoi que ce soit, mais notez ceci dans la spécification HTTP RFC 2616:
Mais ceci est omis de la nouvelle spécification HTTP RFC 7234 dans une tentative potentielle de rendre
no-store
plus fort, voir:http://tools.ietf.org/html/rfc7234#section-5.2.1.5
la source
Cache-Control: no-store
assez?no-store
et décritno-cache
comme s'il ne faisait aucune mise en cache du tout .... Je suis confus!Dans certaines circonstances, IE6 mettra toujours en cache les fichiers même lorsqu'ils
Cache-Control: no-cache
se trouvent dans les en-têtes de réponse.Le W3C déclare
no-cache
:Dans mon application, si vous visitez une page avec l'en-
no-cache
tête , que vous vous déconnectez puis que vous revenez dans votre navigateur, IE6 récupère toujours la page du cache (sans nouvelle demande / validation au serveur). L'ajout de l'en-no-store
tête l'a empêché de le faire. Mais si vous prenez le W3C au mot, il n'y a en fait aucun moyen de contrôler ce comportement:Les différences générales entre l'historique du navigateur et la mise en cache HTTP normale sont décrites dans une sous-section spécifique de la spécification .
la source
no-store
également. Sinon, Chrome affichera les données mises en cache / tamponnées lors de l'utilisation du bouton Précédent.no-cache
tête. La citation du W3C ci-dessous indique clairement que ce n'est pas le cas; plutôt, l'en-no-cache
tête signifie simplement que la réponse doit être revalidée avant d'être réutilisée pour servir les demandes suivantes.À partir de la spécification HTTP 1.1 :
la source
no-cache
etmax-age=0
dites que l'article doit être considéré comme périmé. Cela signifie qu'il doit être revalidé avant d'être servi. Cela signifie qu'un cache pourrait stocker le fichier, puis effectuer une demande conditionnelle à laquelle le serveur pourrait répondre304 NOT MODIFIED
. C'est évidemment un énorme avantage car le corps de la réponse n'a pas besoin d'être généré et envoyé. Donc, pour profiter de ces nombreux caches (la plupart?) , Les réponses seront stockéesno-cache
.Si vous souhaitez empêcher toute mise en cache (par exemple, forcer un rechargement lorsque vous utilisez le bouton de retour), vous avez besoin de:
pas de cache pour IE
no-store pour Firefox
Voici mes informations à ce sujet ici:
http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/
la source
no-store
ne devrait pas être nécessaire dans des situations normales et peut nuire à la fois à la vitesse et à la convivialité. Il est destiné à être utilisé lorsque la réponse HTTP contient des informations si sensibles qu'elles ne doivent jamais être écrites dans un cache disque, quels que soient les effets négatifs que cela crée pour l'utilisateur.Comment ça fonctionne:
Normalement, même si un agent utilisateur tel qu'un navigateur détermine qu'une réponse ne doit pas être mise en cache, il peut toujours la stocker dans le cache disque pour des raisons internes à l'agent utilisateur. Cette version peut être utilisée pour des fonctionnalités telles que "Afficher la source", "Retour", "Informations sur la page", etc., où l'utilisateur n'a pas nécessairement demandé à nouveau la page, mais le navigateur ne la considère pas comme une nouvelle vue de page et il serait logique de servir la même version que celle que l'utilisateur consulte actuellement.
L'utilisation
no-store
empêchera cette réponse d'être stockée, mais cela peut avoir un impact sur la capacité du navigateur à donner «afficher la source», «retour», «informations de page» et ainsi de suite sans faire une nouvelle demande distincte pour le serveur, ce qui n'est pas souhaitable. En d'autres termes, l'utilisateur peut essayer de visualiser la source et si le navigateur ne l'a pas gardée en mémoire, on lui dira que ce n'est pas possible, ou cela entraînera une nouvelle demande au serveur. Par conséquent,no-store
ne doit être utilisé que lorsque l'expérience utilisateur entravée de ces fonctionnalités ne fonctionnant pas correctement ou rapidement est compensée par l'importance de s'assurer que le contenu n'est pas stocké dans le cache.Ceci est une erreur. Les serveurs de cache intermédiaires compatibles avec HTTP 1.1 obéiront aux instructions
no-cache
etmust-revalidate
, garantissant que le contenu n'est pas mis en cache. L'utilisation de ces instructions garantira que la réponse n'est pas mise en cache par un cache intermédiaire et que toutes les demandes ultérieures sont renvoyées au serveur d'origine.Si le serveur de cache intermédiaire ne prend pas en charge HTTP 1.1, vous devrez utiliser
Pragma: no-cache
et espérer le meilleur. Notez que s'il ne prend pas en charge HTTP 1.1, ilno-store
n'est de toute façon pas pertinent.la source
no-cache
maintient une fraîcheur rigide sans sacrifier tous les avantages de la mise en cache, ce qui signifie que le cache est stocké et utilisé à nouveau si le serveur répond avec 304 Non modifié.Si un système de mise en cache implémente correctement le no-store, vous n'aurez pas besoin du no-cache. Mais pas tous. De plus, certains navigateurs implémentent le no-cache comme s'il s'agissait d'un no-store. Ainsi, bien que cela ne soit pas strictement obligatoire, il est probablement plus sûr d'inclure les deux.
la source
Notez qu'Internet Explorer de la version 5 à 8 générera une erreur lors de la tentative de téléchargement d'un fichier servi via https et l'envoi du serveur
Cache-Control: no-cache
ou les en-Pragma: no-cache
têtes.Voir http://support.microsoft.com/kb/812935/en-us
L'utilisation de
Cache-Control: no-store
etPragma: private
semble être la chose la plus proche qui fonctionne toujours.la source
Cache-Control: no-store, no-cache, must-revalidate
cet ordre exact pour que cela fonctionne. Cependant, cela n'a pas fonctionné dans notre scénario, mais ce que @bassim a suggéré ci-dessus l'a fait. Merci!Pour Chrome, le no-cache est utilisé pour recharger la page lors d'une nouvelle visite, mais il la met toujours en cache si vous revenez dans l'historique (bouton retour). Pour recharger également la page pour l'historique, utilisez no-store. IE doit être revalidé pour fonctionner en toutes occasions.
Donc, juste pour être sûr d'éviter tous les bugs et mauvaises interprétations que j'utilise toujours
si je veux m'assurer qu'il se recharge.
la source
À l'origine, nous avons utilisé le no-cache il y a de nombreuses années et avons rencontré des problèmes de contenu obsolète avec certains navigateurs ... Je ne me souviens malheureusement pas des détails.
Depuis, nous nous sommes décidés à utiliser JUSTE le no-store. Je n'ai jamais regardé en arrière ou eu un seul problème avec le contenu périmé par aucun navigateur ou intermédiaire depuis.
Cet espace est certainement dominé par la réalité des implémentations par rapport à ce qui a été écrit dans diverses RFC. De nombreux mandataires en particulier ont tendance à penser qu'ils réussissent mieux à «améliorer les performances» en remplaçant la politique qu'ils sont censés suivre par la leur.
la source
no-store
.Juste pour aggraver les choses, dans certaines situations, le no-cache ne peut pas être utilisé, mais le no-store peut:
http://faindu.wordpress.com/2008/04/18/ie7-ssl-xml-flex-error-2032-stream-error/
la source
OWASP discute de ceci:
Source ici .
la source
no-cache
dit que vous ne pouvez pas l'utiliser sans valider avec le serveur. Si votre copie en cache est toujours bonne, le serveur répondra avec un 304 et vous utiliserez ensuite votre copie en cache. Vous économise un téléchargement réseau potentiellement important.no-store
d'autre part, dit que vous n'êtes pas du tout autorisé à mettre en cache les données.