web-dev-qa-db-fra.com

Quel est le risque d'avoir un en-tête HTTP "Cache-Control: public"?

L'en-tête Cache-Control HTTP/1.1 peut spécifier l'âge maximal ainsi que si le contenu du cache peut être public ou privé, indiquant si le cache intermédiaire peut mettre en cache le contenu.

Par exemple, Ruby sur expires_in() par défaut de Rails utilise Cache-Control: private

Quel est le risque de le rendre public? S'il est public, quels emplacements supplémentaires peuvent mettre en cache le contenu - serait-ce un serveur proxy, par exemple?

Et si le site Web est comme Amazon.com, mais que l'utilisateur est anonyme, il n'y a probablement pas beaucoup de problèmes de confidentialité? Que se passe-t-il si l'utilisateur est connecté, pourrait-il y avoir un problème de confidentialité, car les données passent par des endroits et les données sont visibles. Si cet emplacement veut être "mauvais", il n'a vraiment pas besoin de se soucier du Cache-Control: private De toute façon.

Que se passe-t-il s'il s'agit d'un site Web sur lequel l'utilisateur peut se connecter, mais le site Web ne recherche que des produits de santé comme l'huile de poisson et les vitamines, etc. Dans ce cas, il y a encore moins de confidentialité car c'est différent d'Amazon.com où il y a beaucoup plus de variété de produits tels que des livres pour lesquels un utilisateur peut vraiment se soucier davantage du problème de confidentialité.

Cela dit, quel est l'avantage supplémentaire d'avoir Cache-Control: public?

39

Le problème avec Cache-Control: Public signifie que la réponse peut être mise en cache et affichée pour un autre utilisateur. Il s'agit d'un problème si vous disposez d'une application authentifiée qui affiche des données privées. En général, vous ne devez utiliser public que pour les pages statiques ou les pages qui renvoient les mêmes données, quel que soit l'utilisateur qui fait la demande.

48
Mike

J'ai en outre trouvé la spécification suivante:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1

public

Indique que la réponse PEUT être mise en cache par n'importe quel cache, même si elle ne devrait normalement pas être mise en cache ou ne peut être mise en cache que dans un cache non partagé. (Voir également Autorisation, section 14.8, pour plus de détails.)

privé

Indique que tout ou partie du message de réponse est destiné à un seul utilisateur et NE DOIT PAS être mis en cache par un cache partagé. Cela permet à un serveur Origin d'indiquer que les parties spécifiées de la réponse sont destinées à un seul utilisateur et ne constituent pas une réponse valide aux demandes d'autres utilisateurs. Un cache privé (non partagé) PEUT mettre en cache la réponse. Remarque: Cette utilisation de Word privé contrôle uniquement où la réponse peut être mise en cache et ne peut pas garantir la confidentialité du contenu du message.

Il semble donc qu'il s'agit davantage de "cache partagé" que de cache intermédiaire.

28