Como configurar os cabeçalhos de controle de cache no Apache

    >

  • Anthony Heddings
  • Julho 29, 2020, 11:00am EDT

apache

Cada navegador do usuário faz uso de um cache embutido para armazenar os objetos baixados, o que pode acelerar significativamente as visitas repetidas ao seu site carregando a partir do disco e não da rede. Veja como configurá-lo no Apache.

Como funciona o cache?

A primeira vez que um usuário se conectar ao seu site, ele irá baixar todos os recursos estáticos necessários para renderizar a página, incluindo coisas como o seu logotipo. Quando navegarem para uma nova página, carregarão o seu logótipo da memória em vez de o pedirem novamente, acelerando significativamente o desempenho e reduzindo a carga no seu servidor Web no processo.

Esta é uma cache do lado do cliente, mas muitos sites também farão uso de uma Rede de Entrega de Conteúdos, ou CDN. Uma CDN é uma rede de servidores que fica na frente do seu servidor web principal, ou servidor de “origem”. Esta rede armazena em cache as suas páginas, aumentando a sua largura de banda máxima, reduzindo a latência de acesso, e reduzindo grandemente o stress colocado no seu servidor de origem. Se você gostaria de aprender mais sobre CDNs, você pode ler nosso guia sobre eles aqui.

Cache-Control é um cabeçalho que você pode configurar seu servidor web para adicionar a todos os pedidos de saída, que dirá ao navegador e CDNs como fazer cache do seu conteúdo.

Anúncio

Determinadas páginas nunca devem ser colocadas em cache por caches compartilhados como CDNs. Fazendo isso, arriscaremos a exibir as informações pessoais de um usuário para outros. Como regra geral, se a página vai ser exatamente a mesma para todos os usuários, como a sua página inicial, você pode armazená-la em cache. Se ela mostrar informações confidenciais do usuário, você vai querer colocá-la na lista negra do seu cache. Recursos estáticos, como CSS e imagens, podem normalmente ser armazenados em cache para todos, muitas vezes por muito mais tempo.

A quantidade de tempo que o objecto passa na cache também é importante. Referido como o Time-To-Live (TTL), a idade máxima dos seus recursos em cache determina quanto tempo o objecto permanecerá em cache antes de ser invalidado, e incitando o utilizador a solicitar um novo objecto. Para recursos estáticos que não mudam muito, você pode definir valores muito altos de TTL, geralmente em torno de dois anos. Para coisas que você pode querer atualizar, você vai querer definir valores TTL mais baixos para evitar que recursos obsoletos fiquem na cache por muito tempo.

Você sempre pode usar nomes de arquivos versionados para acionar uma recarga da cache. Se você lançar uma nova versão de uma folha de estilo CSS, você pode nomeá-la styles-1.0.1.css, e o navegador do usuário (e quaisquer CDNs na frente dela) a verá como um novo arquivo que precisa ser recarregado. Além disso, para alguns CDNs, você pode emitir invalidações manuais para limpar o cache existente sem alterar nenhum nome de arquivo.

Como usar o Cache-Control no Apache

Cache-Control tem algumas opções:

  • public – Pode ser colocado em cache por qualquer pessoa, incluindo navegadores e CDNs. Use isto para a maioria dos objetos estáticos.
  • private – Contém dados sensíveis que não podem ser armazenados em cache por CDNs ou proxies inversos. O navegador do usuário pode armazená-los em cache localmente. Use isto para a maioria das páginas autenticadas.
  • no-cache – Apesar do nome, ele não desabilita o cache. O navegador pode ainda armazenar em cache a resposta para desempenho, mas deve verificar com o servidor de origem para atualizações antes de usá-lo. Use isto se você quiser que o usuário revalide cada vez.
  • no-store – Desabilita o cache por completo. Use isto apenas para dados altamente sensíveis que não devem ser enviados duas vezes.

Adicionalmente, você pode adicionar a diretiva no-transform, que desativa qualquer conversão que possa ser feita para o recurso. Por exemplo, alguns CDNs comprimem imagens para reduzir a largura de banda. Esta diretiva desabilita esse comportamento.

No Apache, você terá que definir esse cabeçalho manualmente usando a diretiva Header set, assim:

Header set Cache-Control "max-age=84600, public"

O valor max-age é definido em segundos, por exemplo, max-age=300 para uma TTL de cinco minutos, e max-age=63072000 para dois anos.

Anúncio

Você pode colocar esta diretiva na raiz da sua configuração para aplicar em todo o site, mas um método melhor é aplicar as configurações, dependendo do tipo de arquivo. Por exemplo, para definir um alto TTL para a maioria das mídias estáticas, você pode usar um bloco FilesMatch bloco:

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> Header set Cache-Control "max-age=63072000, public" </FilesMatch>

Se você quiser colocar um caminho específico na lista negra de ser colocado em cache pelos CDNs, você pode usar um bloco Directory:

<Directory "/private"> Header set Cache-Control "max-age=300, private" </Directory> 

Or simplesmente combine um único ficheiro:

<File "protected.html"> Header set Cache-Control "max-age=300, private" </File>

Os blocos com as correspondências mais específicas terão precedência sobre as correspondências regex gerais, mas você vai querer verificar se tudo está a ser definido correctamente na extremidade receptora. Você pode verificar isso no DevTools do Chrome, em Network > Headers.

chrome devtools network tab

Se você só tem acesso a .htaccess configuração, você ainda pode usar a correspondência de diretórios criando um novo arquivo .htaccess em cada subdiretório.

Utilizar o Surrogate-Control para Modificar o Comportamento do CDN Directamente

O Surrogate-Control funções de cabeçalho exactamente como Cache-Control, mas detalha instruções específicas para CDNs e proxies inversos, em vez de utilizadores finais. Desta forma, você pode dizer aos CDNs para fazer uma coisa, mas envie direções diferentes para o navegador.

Anúncio

Você terá que definir este cabeçalho manualmente, da mesma forma que você definiu Cache-Control:

Header set Surrogate-Control "max-age=300, public"

Você definitivamente vai querer testar com o seu CDN para verificar que isto funciona-Surrogate-Control é bastante novo, e não é universal.

Anthony Heddings
Anthony Heddings é o engenheiro de nuvens residente da LifeSavvy Media, um escritor técnico, programador e um especialista na plataforma AWS da Amazon. Ele escreveu centenas de artigos para How-To Geek e CloudSavvy IT que já foram lidos milhões de vezes. Leia a biografia completa ”

Deixe uma resposta

O seu endereço de email não será publicado.