Privado vs público en el control de caché

127

¿Puede describir un ejemplo que indique la diferencia entre el control de caché público y privado en las aplicaciones asp.net alojadas en IIS?

Leí en MSDN que la diferencia es la siguiente:

Público: establece el control de caché: público para especificar que los clientes y las cachés compartidas (proxy) pueden almacenar la respuesta en caché.

Privado: valor predeterminado. Establece Cache-Control: private para especificar que la respuesta solo se puede almacenar en caché en el cliente y no en cachés compartidas (servidor proxy).

No estoy seguro de haber entendido completamente los pros y los contras de cada elección. Un ejemplo de cuándo usarlo o no sería genial.

Por ejemplo, ¿qué debo hacer si tengo dos servidores web que alojan la misma aplicación? ¿Hay algo a tener en cuenta si elijo Privado o Público?

ppolyzos
fuente

Respuestas:

237

La única diferencia es que con Private no está permitiendo que los servidores proxy almacenen en caché los datos que viajan a través de ellos. Al final, todo se reduce a los datos contenidos en las páginas / archivos que está enviando.

Por ejemplo, su ISP podría tener un proxy invisible entre usted e Internet, que es el almacenamiento en caché de páginas web para reducir la cantidad de ancho de banda necesaria y disminuir los costos. Al usar cache-control: private, está especificando que no debe almacenar en caché la página (pero permitiendo que el usuario final lo haga). Si utiliza el control de caché: público, está diciendo que está bien que todos almacenen en caché la página, por lo que el proxy conservará una copia.

Como regla general, si es algo a lo que todos pueden acceder (por ejemplo, el logotipo en esta página), el control de caché: público podría ser mejor, porque cuantas más personas lo almacenen en caché, menos ancho de banda necesitará. Si es algo relacionado con el usuario conectado (por ejemplo, el HTML en esta página incluye mi nombre de usuario, por lo que no será útil para nadie más) control de caché: privado será mejor, ya que los proxies estarían almacenando datos en caché eso no será solicitado por otros usuarios, y también podrían estar guardando datos que no desea que se mantengan en servidores en los que no confía.

Y, por supuesto, todo lo que no sea público debe tener un caché privado. De lo contrario, los datos podrían almacenarse en un servidor proxy intermedio, donde cualquier persona con acceso a ellos podría acceder a ellos.

salgiza
fuente
39
La única diferencia es que con privada que está no permitiendo a los proxies caché ... Supongo que esto fue un error tipográfico. +1 en la respuesta aparte de eso. Vale la pena agregar que privado no ofrece ningún grado de seguridad, todavía puede ser visto por agentes en el medio. Simplemente significa que ningún agente "honesto" se lo dará a otra persona en lugar de una respuesta recién generada.
Jon Hanna
¡Fijo! Es divertido porque lo volví a leer varias veces antes de publicar, pero creo que sabía que el "no" tenía que estar allí, así que mi mente simplemente lo agregó: D. Y sí, +1 a su comentario, porque debe tenerse en cuenta que, si bien se recomienda para datos relacionados con el usuario, privado no reemplazará la verdadera seguridad (SSL).
salgiza
Es muy fácil escribir "no" cuando no deberías u omitirlo cuando deberías. Sé que una gran cantidad de mis propias autoediciones (en diferentes campos) está arreglando ese mismo error tipográfico.
Jon Hanna
15
Entonces, si no especificamos nada, ¿el comportamiento predeterminado es "público" o "privado"?
Pacerier
1
@Honey pero puede haber varios clientes que usan el mismo proxy. Si está bien, envíe a todos los clientes la misma respuesta, entonces está bien almacenar en caché a nivel de proxy, de lo contrario podría estar bien almacenar en caché en el cliente (todavía hay casos en los que incluso es una mala idea), pero no en el proxy.
Jon Hanna