Explorar o
cache do cliente é uma das chaves para a otimização em sites de grande volume de acesso. Voltando ao exemplo da home do VOL, a mesma possui 27 elementos, sendo 1 dinâmico e 26 estáticos.
Sem nenhuma otimização de configuração, toda vez que um cliente (browser) visitar o site, todos os 27 elementos serão baixados e cada download originará uma conexão direta com o servidor web, o que consome recursos de software e também largura de banda, visto que o download sempre precisa ser realizado novamente, mesmo você sendo visitante reincidente.
Como é sabido, todo browser possui um espaço reservado para cache de páginas de internet e esse cache é diretamente controlado pelas tags de controle de cache informadas pelo site visitado. Sendo assim, por quê não aproveitar o recurso de cache local dos clientes para diminuir a quantidade de acessos ao seu servidor?
Expires
Para explorar tal recurso devemos configurar 2 itens no servidor web. O primeiro é a tag "
Expires", que informa ao browser que determinado arquivo é válido por algum período de tempo. A configuração padrão na maioria dos servidores web é de 1 dia, o que considero insuficiente. Com 1 dia de validez, um visitante assíduo de seu site baixará os arquivos estáticos do mesmo 30 vezes por mês. Se você considerar que sua logotipo não muda menos que 1 vez por ano, fazê-lo baixar o mesmo arquivo todos os dias é um baita desperdício.
A configuração que considero ideal para cache de arquivos estáticos é de 1 ano. Mas aí você me pergunta:
"- Se o browser do usuário vai ficar 1 ano usando minha logotipo cacheada em seu disco local, se eu atualizar minha logo, como a mesma atualizará no cache do cliente?"
A solução é simples. Se você atualizar sua logotipo, que no caso se chama logotipo01.png, renomeie o arquivo para logotipo02.png. O primeiro arquivo está em cache, mas o segundo não. Esta solução requer este tipo de sincronia com o webmaster, porém o custo x benefício é grande. Muita banda e recurso economizado para pouco trabalho renomeando arquivos que quase nunca mudam.
Para você entender melhor o conceito da tag Expires, vamos a um exemplo prático, onde baixaremos um arquivo usando o protocolo HTTP na unha:
$ telnet www.vivaolinux.com.br 80
Trying 76.74.248.57...
Connected to vivaolinux.com.br.
Escape character is '^]'.
GET /publico/cache.txt HTTP/1.0
Host: www.vivaolinux.com.br
<Digite enter para gerar uma linha em branco aqui>
HTTP/1.1 200 OK
Date: Thu, 03 Sep 2009 10:01:07 GMT
Server: Apache
Last-Modified: Thu, 03 Sep 2009 09:49:01 GMT
Accept-Ranges: bytes
Content-Length: 43
Expires: Fri, 03 Sep 2010 10:03:24 GMT
Vary: Accept-Encoding
Connection: close
Content-Type: text/plain; charset=ISO-8859-1
Olá, agora este arquivo está no seu cache!
Connection closed by foreign host.
Simulamos, via telnet, a conexão que um browser faz quando é digitada a URL
http://www.vivaolinux.com.br/publico/cache.txt. Neste caso os campos Date, Server, Last-Modified, Accept-Ranges, Content-Length, Expires, Vary, Connection e Content-Type correspondem à informações trocadas entre o browser e o servidor, não sendo visíveis na tela do usuário.
No exemplo acima a tag "Expires" informa ao browser que o arquivo cache.txt é válido, por 1 ano, no caso até 3 de setembro de 2010. Sendo assim o browser guarda este arquivo em cache por 1 ano.
Etag
Etag foi uma tag criada para ser a sucessora do Expires. Em breves palavras, ela cria uma assinatura para cada arquivo oferecido pelo servidor ao cliente e esta serve para controle de cache, sobrepondo as informações oferecidas pelo Expires. O Etag não define uma data futura para o vencimento do cache do arquivo, ao invés disso ele faz o servidor web, de tempos em tempos, gerar uma nova assinatura para o arquivo para comparar com a assinatura armazenada pelo browser do cliente.
Resumindo, Etag não colou, mas vem habilitado na configuração padrão da maioria dos servidores web disponíveis. Cabe ao administrador do sistema DESABILITAR o uso de Etag no servidor.
No decorrer do artigo veremos como configurar o Expires e o Etag tanto no Lighttpd quanto no Apache.