Cache-control é uma das informações que você pode enviar com as headers da sua aplicação. Ela serve para informar ao navegador (ou até mesmo alguns serviços de distribuição com o AWS CloudFront) quanto tempo eles devem armazenar o arquivo.
Uma vez que eles armazenam o arquivo, quando eles precisarem do mesmo novamente, eles não vão ocupar seu servidor pedindo. Eles vão simplesmente usar o que já têm armazenado. Isso melhora a performance da sua aplicação de forma significativa.
Uma vez que eles armazenam o arquivo, quando eles precisarem do mesmo novamente, eles não vão ocupar seu servidor pedindo. Eles vão simplesmente usar o que já têm armazenado. Isso melhora a performance da sua aplicação de forma significativa.
Max-Age
Esta talvez seja a informação mais importante dentro do cache-control. Isso porque é geralmente a mais necessária. Max-age literalmente significa "idade-máxima". Ou seja, qual é a idade-máxima que este arquivo pode ter no armazenamento?
A unidade utilizada é segundos. Então, no exemplo cache-control: max-age=60, o arquivo será armazenado por 1 minuto.
Isso quer dizer que ao receber o arquivo, o navegador vai guardar ele em cache por 1 minuto. Caso o arquivo seja necessário novamente durante este intervalo, o navegador não vai chamar seu servidor. Ele vai simplesmente servir o que já tem.
Exemplos comuns de max-age:
1 minuto: cache-control: max-age=60
1 hora: cache-control: max-age=3600
1 dia: cache-control: max-age=86400
1 semana: cache-control: max-age=604800
1 mês: cache-control: max-age=2592000
1 ano: cache-control: max-age=31536000
5 anos: cache-control: max-age=157680000
No-Store
Esta instrução avisa que o arquivo em questão não deve ser armazenado e ponto. Isso quer dizer que esta informação não será salva em lugar algum e, toda vez que for necessária, será chamada do servidor novamente.
Isso pode deixar a aplicação lenta. Dependendo da requisição e do arquivo, pode ser algo pesado que toma tempo e atrapalha a performance. Porém, se forem informações importantes e confidenciais, é melhor assim. Por esta razão, este costuma ser o cache-control de informações bancárias, por exemplo.
O No-Store também é usado as vezes para informações que mudam com muita frequência. Se você tem um site que lida com leilões, sei lá, qualquer coisa onde 1 segundo de atraso da informação pode melar tudo para o seu usuário, você vai precisar usar cache-control: no-store para ter certeza que o navegador está sempre mostrando o conteúdo mais atual possível.
Public
Quando o cache-control vem com o valor de public, ele está dizendo literalmente isso: "Isso aqui é público".
Sendo público, qualquer navegador ou serviço de distribuição pode armazenar e usar cache e está tudo certo. Num site com venda de produtos, por exemplo, todas as fotos dos produtos podem ter cache-control: public, afinal é algo que todo mundo pode ter acesso, pode ver, pode visitar, então não há problema algum em ser armazenado em qualquer lugar.
Private
Private é contrário de public, né? Então, se acima dissemos que um arquivo pode ser público, liberado, aqui é hora de dizer que um arquivo pode ser privado, confidencial. Para isso a configuração fica cache-control: private.
Ao marcar um arquivo desta forma, estamos dizendo que ele pode conter informações sensíveis e/ou específicas, então não deve ser armazenado por serviços de distribuição. Isso quer dizer que um serviço como o AWS CloudFront não vai armazenar as informações, mas o navegador do usuário sim.
Considerando nosso exemplo anterior, o site com vendas de produtos, o cache-control: private seria inteligente numa possível tela que liste o histórico de compras do cliente, por exemplo.
Mas e o "Expires"?
Este expires é literalmente uma data que informa quando o arquive vence. Um arquivo expirado (ou vencido) é um arquivo que não deve mais ser usado. Quando isso acontece, o navegador vai buscar a informação novamente no servidor.
De certa forma, o Expires é semelhante ao Max-Age. Para um você dá a data de vencimento. Para o outro você diz o tempo de validade em si.
Mas e se tiver os dois?
Se tiver os dois, só o Max-Age importa. Uma arquivo que chegue com cache-control max-age e também tenha uma data no Expires é tratado com base apenas no Max-Age.
Atenção
Existem mais conceitos e mais informações importantes a respeito de cache e cache-control que não constam aqui neste post. A intensão deste post não é tornar ninguém um expert. Muito pelo contrário, este post é para alguém que está começando agora e precisa entender o básico inicial para começar a tomar algumas decisões e configurar regras de cache.
Nenhum comentário:
Postar um comentário