Getting your Trinity Audio player ready...
|
|
Cache-Control
é um cabeçalho HTTP que consiste em um conjunto de configurações que permite com que você especifique como, quando e por quanto tempo um um cache acontecerá.
Quando você visita um website, seu browser copia partes dos componentes desse website para um diretório para que experiência seja mais rápida. Quando você revisita esse site muitas partes do site não são carregadas do servidor web, mas sim do cache que está na sua maquinas, você pode usar o Cache-Control
para definir as regas de como esses conteúdo será carregado, como por quanto tempo o browser pode fazer cache, se ele vai fazer cache de algum componente ou algum tipo de arquivo específico.
É importante entender que cache é muito bom para a experiência do usuário final, fazê-lo ter que ir até seu servidor web para todas as requisições pode fazer a experiência com seu produto ser desagradável, mas é muito mais importante você entender o que realmente pode ficar na máquina do usuário e o que deve ser carregado dinamicamente desconsiderando o lado do usuário, afinal, dependendo do seu tipo de conteúdo, uma página mau configurada, um componente mau testado, ou um chat-bot onde precisa existir uma comunicação mais dinâmica pode ser impactado.
Cache-Control: no-cache
no-cache
significa que o recurso não pode ser reutilizado sem primeiro ser checado se ele foi alterado ou atualizado em sua origem. Usualmente um cabeçalho ETag é usado para isso.
Cache-Control: no-store
no-store
é similar ao no-cache
onde o conteúdo não pode ser reutilizado nem cacheado. Entretanto, diferente da outra opção o no-store
força que todo o conteúdo seja baixado novamente da fonte, desconsiderando a ETag.
Cache-Control: public
Uma resposta contendo public
significa que está autorizado que o cache seja feito por qualquer parte envolvida, não apenas o cliente final, neste caso estamos falando de caches intermediários como proxys, gateways, CDN’s, etc.. Para essa situação é recomendado que seja adicionado o max-age
afim de garantir que em algum momento o cache tando to usuário final quanto do intermediário sejam limpos.
Cache-Control: private
A opção private
significa que apenas o browser do solicitante pode fazer cache do conteúdo, e os intermediários não devem fazer cache do conteúdo.
Cache-Control: max-age=<seconds>
Esta opção indica ao browser por quanto tempo ele deve considerar o conteúdo daquele cache como passível de utilização, após o termino desse tempo novas requisições devem recarregar todo o conteúdo.
Cache-Control: s-maxage=<seconds>
s-maxage
é similar ao max-age
. O “s” significa shared e é relevante apenas para os CDNs ou outro cache intermediário. Esta opção sobrescreve o max-age
e expires
.
Cache-Control: no-transform
Caches intermediários podem, as vezes, alterar o formato ou compressão das imagens para melhorar a performance. O no-transform
diz aos intermediários para que não alterem o formato das imagens.
Exemplos de implementação:
Web Pages (HTML)
Para as páginas WEB (HTML) adicione as seguintes tags <meta>
nas páginas que você quer que o controle de cache seja diferente do browser (lembrando que o código precisa estar na sessão <head>
da página):
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
.htaccess (Apache)
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</IfModule>
Java Servlet
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
PHP
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
ASP
Response.addHeader "Cache-Control", "no-cache, no-store, must-revalidate"
Response.addHeader "Pragma", "no-cache"
Response.addHeader "Expires", "0"
ASP.NET
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");
Ruby on Rails
response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
response.headers['Pragma'] = 'no-cache'
response.headers['Expires'] = '0'
Python on Flask
resp.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
resp.headers["Pragma"] = "no-cache"
resp.headers["Expires"] = "0"
Google Go
responseWriter.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
responseWriter.Header().Set("Pragma", "no-cache")
responseWriter.Header().Set("Expires", "0")