Privé vs public dans Cache-Control

127

Pouvez-vous décrire un exemple indiquant la différence entre le contrôle du cache public et privé dans les applications asp.net hébergées dans IIS.

J'ai lu dans MSDN que la différence est la suivante:

Public: définit Cache-Control: public pour spécifier que la réponse peut être mise en cache par les clients et les caches partagés (proxy).

Privé: valeur par défaut. Définit Cache-Control: private pour spécifier que la réponse ne peut être mise en cache que sur le client et non par les caches partagés (serveur proxy).

Je ne suis pas sûr d'avoir complètement compris les avantages et les inconvénients de chaque choix. Un exemple pour savoir quand l'utiliser ou ne pas l'utiliser serait génial.

Par exemple, que dois-je faire si j'ai deux serveurs Web hébergeant la même application? Y a-t-il quelque chose à surveiller si je choisis Privé ou Public?

ppolyzos
la source

Réponses:

237

La seule différence est qu'avec Private, vous n'autorisez pas les proxys à mettre en cache les données qui les traversent. En fin de compte, tout se résume aux données contenues dans les pages / fichiers que vous envoyez.

Par exemple, votre FAI peut avoir un proxy invisible entre vous et Internet, qui met en cache des pages Web pour réduire la quantité de bande passante nécessaire et réduire les coûts. En utilisant cache-control: private, vous spécifiez qu'il ne doit pas mettre en cache la page (mais en permettant à l'utilisateur final de le faire). Si vous utilisez cache-control: public, vous dites que tout le monde peut mettre en cache la page et que le proxy en garde donc une copie.

En règle générale, si c'est quelque chose que tout le monde peut accéder (par exemple, le logo de cette page) cache-control: public pourrait être mieux, car plus il y a de personnes qui le mettent en cache, moins vous aurez besoin de bande passante. Si c'est quelque chose qui est lié à l'utilisateur connecté (par exemple, le HTML de cette page inclut mon nom d'utilisateur, donc cela ne sera utile à personne d'autre) cache-control: private sera mieux, car les proxys mettront en cache des données cela ne sera pas demandé par d'autres utilisateurs, et ils peuvent également conserver des données que vous ne souhaitez pas conserver sur des serveurs auxquels vous ne faites pas confiance.

Et, bien sûr, tout ce qui n'est pas public devrait avoir un cache privé. Sinon, les données pourraient être stockées dans un serveur proxy intermédiaire, si quiconque y ayant accès pourrait y accéder.

salgiza
la source
39
La seule différence est qu'avec Private, vous n'autorisez pas les proxys à mettre en cache ... Je suppose que c'était une faute de frappe. +1 sur la réponse en dehors de cela. Il vaut la peine d'ajouter que le privé n'offre aucun degré de sécurité, il peut toujours être vu par les agents du milieu. Cela signifie simplement qu'aucun agent "honnête" ne le donnera à quelqu'un d'autre au lieu d'une réponse fraîchement générée.
Jon Hanna
Fixé! C'est drôle parce que je l'ai relu plusieurs fois avant de poster, mais je suppose que je savais que le "pas" devait être là, alors mon esprit l'a simplement ajouté: D. Et oui, +1 à votre commentaire, car il convient de noter que, bien que recommandé pour les données relatives aux utilisateurs, le privé ne remplacera pas la vraie sécurité (SSL).
salgiza
Il est si facile d'écrire «non» quand vous ne devriez pas ou de l'omettre quand vous devriez. Je sais qu'un grand nombre de mes propres modifications automatiques (dans différents domaines) corrige cette même faute de frappe.
Jon Hanna
15
Donc si nous ne spécifions rien, le comportement par défaut est-il "public" ou "privé"?
Pacerier
1
@Honey mais il peut y avoir plusieurs clients utilisant le même proxy. Si vous ne pouvez pas envoyer la même réponse à tous les clients, vous pouvez mettre en cache au niveau du proxy, sinon il peut être acceptable de mettre en cache au niveau du client (il y a encore des cas où même c'est une mauvaise idée), mais pas sur le proxy.
Jon Hanna