Privado x Público no Controle de Cache

127

Você pode descrever um exemplo indicando a diferença entre o controle de cache público e privado nos aplicativos asp.net hospedados no IIS.

Eu li no MSDN que a diferença é a seguinte:

Público: Define Cache-Control: public para especificar que a resposta é armazenável em cache pelos clientes e caches compartilhados (proxy).

Privado: valor padrão. Define Cache-Control: private para especificar que a resposta é armazenável em cache somente no cliente e não por caches compartilhados (servidor proxy).

Não sei se entendi completamente os prós e contras de cada escolha. Um exemplo de quando usar ou não seria ótimo.

Por exemplo, o que devo fazer se tiver dois servidores web hospedando o mesmo aplicativo? Há algo a observar se eu escolher Privado ou Público?

ppolyzos
fonte

Respostas:

237

A única diferença é que, com o Private, você não está permitindo que os proxies armazenem em cache os dados que os percorrem. No final, tudo se resume aos dados contidos nas páginas / arquivos que você está enviando.

Por exemplo, seu provedor de serviços de Internet pode ter um proxy invisível entre você e a Internet, que está armazenando em cache as páginas da Web para reduzir a quantidade de largura de banda necessária e reduzir os custos. Ao usar cache-control: private, você especifica que não deve armazenar em cache a página (mas permite que o usuário final faça isso). Se você usa cache-control: public, está dizendo que não há problema em todos armazenarem em cache a página e, portanto, o proxy manterá uma cópia.

Como regra geral, se é algo que todos podem acessar (por exemplo, o logotipo nesta página), controle de cache: público pode ser melhor, porque quanto mais pessoas o armazenam em cache, menor será a largura de banda. Se houver algo relacionado ao usuário conectado (por exemplo, o HTML nesta página inclui meu nome de usuário, portanto não será útil para ninguém) controle de cache: private será melhor, pois os proxies estariam armazenando dados em cache isso não será solicitado por outros usuários e eles também poderão manter os dados que você não deseja que sejam mantidos em servidores nos quais não confia.

E, é claro, tudo o que não é público deve ter um cache privado. Caso contrário, os dados poderão ser armazenados em um servidor proxy intermediário, se puderem ser acessados ​​por qualquer pessoa com acesso a eles.

salgiza
fonte
39
A única diferença é que, com o Private, você não está permitindo que os proxies façam cache ... Acho que isso foi um erro de digitação. +1 na resposta, além disso. Vale acrescentar que o privado não oferece nenhum grau de segurança, ainda pode ser visto pelos agentes no meio. Significa apenas que nenhum agente "honesto" o dará a outra pessoa, em vez de uma resposta recém-gerada.
Jon
Fixo! É engraçado porque eu o reli algumas vezes antes de postar, mas acho que sabia que o "não" tinha que estar lá, então minha mente apenas acrescentou: D. E sim, marque +1 no seu comentário, porque é importante observar que, embora seja recomendado para dados relacionados ao usuário, o privado não substituirá a verdadeira segurança (SSL).
Salgiza 16/08/10
É tão fácil escrever "não" quando você não deveria ou omitir quando deveria. Sei que um grande número de minhas próprias edições (em campos diferentes) está corrigindo o mesmo erro de digitação.
Jon Hanna
15
Portanto, se não especificarmos nada, o comportamento padrão é "público" ou "privado"?
Pacerier
1
@ Mel, mas pode haver vários clientes usando o mesmo proxy. Se estiver tudo bem, envie a todos os clientes a mesma resposta, não há problema em fazer cache no nível do proxy, caso contrário, pode ser bom fazer cache no cliente (ainda há casos em que isso é uma má ideia), mas não no proxy.
Jon Hanna