{"id":2774,"date":"2014-07-30T14:15:40","date_gmt":"2014-07-30T14:15:40","guid":{"rendered":"http:\/\/www.deuzebranaweb.com.br\/?p=2774"},"modified":"2014-07-30T14:15:40","modified_gmt":"2014-07-30T14:15:40","slug":"habilitando-e-configurando-cache-no-apache-mod_expires","status":"publish","type":"post","link":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/2014\/07\/30\/habilitando-e-configurando-cache-no-apache-mod_expires\/","title":{"rendered":"Habilitando e configurando Cache no Apache (mod_expires)"},"content":{"rendered":"<h3 class=\"post-title entry-title\" style=\"color: #666666;\">Ol\u00e1 a todos, no nosso \u00faltimo post, ensinamos como configurar a compress\u00e3o da resposta do servidor aos usu\u00e1rios, diminuindo bastante o conte\u00fado de textos, como html, css e javascript. Desta vez o post ser\u00e1 para ensinarmos o melhor jeito de se implementar o gerenciamento de cache, fazendo com que os navegadores guardem certos arquivos por uma data especificada pelo servidor, evitando assim um enorme tr\u00e1fego de rede desnecess\u00e1rio e aumentando muito a velocidade de carregamento da p\u00e1gina.<\/h3>\n<div id=\"post-body-1410784340059732925\" class=\"post-body entry-content\" style=\"color: #666666;\">\n<p>Aproveitar a funcionalidade de cache dos navegadores consiste em definir uma data de validade nos cabe\u00e7alhos HTTP para recursos est\u00e1ticos, instruindo o navegador a carregar os recursos baixados anteriormente a partir do disco local, n\u00e3o atrav\u00e9s da rede.<\/p>\n<p>Todo administrador de redes, sabe que a tend\u00eancia \u00e9 que os sites sejam cada vez mais din\u00e2micos e ricos em conte\u00fado, mas toda essa interatividade e riqueza de conte\u00fado tem um pre\u00e7o, alto tr\u00e1fego de rede. Quando algu\u00e9m acessa o seu site, diversos arquivos s\u00e3o baixados, como textos, imagens, css, javascripts. Para impedir todos esses downloads novamente \u00e9 que surge a necessidade de se gerenciar o cache dos usu\u00e1rios.<\/p>\n<h3>Indice<\/h3>\n<ul>\n<li>O que \u00e9 cache de navegador?<\/li>\n<li>Formas erradas de se implementar o cache de navegador<\/li>\n<li>Forma correta de se implementar o cache de navegador<\/li>\n<li>Habilitando mod_expires e mod_headers no Apache<\/li>\n<li>Testando a Configura\u00e7\u00e3o<\/li>\n<li>Conclus\u00e3o<\/li>\n<\/ul>\n<h3>O que \u00e9 cache de navegador?<\/h3>\n<p>Antes de falarmos sobre as configura\u00e7\u00f5es do apache, devemos entender bem o que \u00e9 e como funciona o cache de arquivos pelo navegador. Pois bem, sempre que um usu\u00e1rio acessa o seu site, todo o conte\u00fado dispon\u00edvel na p\u00e1gina acessada pelo usu\u00e1rio, tais como imagens, arquivos css, arquivos javascript, arquivos xml e etc \u00e9 baixado para o seu computador, permanecendo em uma pasta no seu disco r\u00edgido. Assim, quando o usu\u00e1rio entrar no seu site novamente, ele poder\u00e1 ou n\u00e3o baixar todo o conte\u00fado novamente, vai depender das configura\u00e7\u00f5es de cache do navegador dele, e do seu servidor http.<\/p>\n<p>Ent\u00e3o cache \u00e9 o ato de salvar os dados em um local para r\u00e1pido acesso, n\u00e3o precisando ir busc\u00e1-lo na fonte original (servidor http). Assim sendo, a partir do primeiro acesso podemos instruir o navegador a guardar estes arquivos no disco r\u00edgido do usu\u00e1rio, e tamb\u00e9m podemos definir o tempo que este arquivo ficar\u00e1 armazenado. Assim, quando o usu\u00e1rio acessar o seu site novamente ou navegar por outras p\u00e1ginas, ao inv\u00e9s de precisar baixar toda a p\u00e1gina novamente, o navegador ser\u00e1 instru\u00eddo a buscar os conte\u00fados diretamente do Cache. Caso ele n\u00e3o tenha algo no Cache ou o tempo de perman\u00eancia tenha expirado, \u00e9 solicitado o arquivo em quest\u00e3o ao servidor do site.<\/p>\n<p><strong>Note que \u00e9 imensamente mais r\u00e1pido buscar conte\u00fado do cache, do que em servidores http, que geralmente se encontram em outros pa\u00edses e podem inclusive estar ocupados.<\/strong><\/p>\n<h3>Formas erradas de se implementar o cache de navegador<\/h3>\n<p>Uma forma bem comum de tentar fazer isso, por\u00e9m extremamente inconsistente, \u00e9 usar as Meta Tags Expires, Pragma e Cache-control no cabe\u00e7alho do documento, na tentativa de determinar a data e a hora em que a p\u00e1gina expira e que os dados desta devem ser armazenados.<\/p>\n<pre style=\"color: #000000;\"><code> &lt;!doctype html&gt;  \n &lt;html dir=\"ltr\" lang=\"pt-BR\"&gt;  \n &lt;head&gt;  \n &lt;title&gt;Lorindo.com&lt;\/title&gt;  \n &lt;meta http-equiv=\"expires\" content=\"Tue, 05 Jan 2013 12:12:12 GMT\"&gt;  \n &lt;meta http-equiv=\"cache-control\" content=\"public\" \/&gt; &lt;!-- reconhecida pelo HTTP 1.1 --&gt;  \n &lt;meta http-equiv=\"Pragma\" content=\"public\"&gt; &lt;!-- reconhecida por todas as vers\u00f5es do HTTP --&gt;  \n<\/code><\/pre>\n<p>Ou ent\u00e3o gerar cabe\u00e7alhos HTTP apartir de linguagens server-side, como o PHP ou Java.<\/p>\n<pre style=\"color: #000000;\"><code> &lt;?php  \n header(\"Cache-Control: private, max-age=10800, pre-check=10800\");  \n header(\"Pragma: private\");  \n header(\"Expires: \" . date(DATE_RFC822,strtotime(\"30 day\")));  \n ?&gt;  \n<\/code><\/pre>\n<p>Esses m\u00e9todos podem at\u00e9 ser muito simples de serem implementados, talvez por isso sejam t\u00e3o usados, por\u00e9m j\u00e1 est\u00e3o obsoletos. At\u00e9 mesmo, porque \u00e9 muito mais simples configurar apenas um arquivo no servidor, do que configurar cada p\u00e1gina separada.<\/p>\n<h3>Forma correta de se implementar o cache de navegador<\/h3>\n<p>A forma correta de se implementar e configurar o cache do navegador, \u00e9 adicionando configura\u00e7\u00f5es no arquivo httpd.conf do apache, desta forma \u00e9 poss\u00edvel especificar uma data de expira\u00e7\u00e3o para arquivos de imagem, javascript, css, m\u00eddias, pdf, flash e demais arquivos servidos pelo site.<\/p>\n<p>Fazendo uma simples configura\u00e7\u00e3o, voc\u00ea consegue diminuir muito o tempo de carregamento da sua p\u00e1gina web, garantindo uma melhor performance e experi\u00eancia para os seus usu\u00e1rios.<\/p>\n<p>Existem duas formas de se realizar Cache de navegador pelo servidor http:<\/p>\n<ol>\n<li>Cabe\u00e7alho Expires: Com o cabe\u00e7alho expires \u00e9 poss\u00edvel determinar a expira\u00e7\u00e3o de um arquivo, colocando-o assim em Cache. Ele deve ser utilizado para navegadores que utilizam o protocolo HTTP 1.0 para a comunica\u00e7\u00e3o com o servidor.<\/li>\n<li><\/li>\n<li>Cabe\u00e7alho Cache-Control: Com o cabe\u00e7alho Cache-Control \u00e9 poss\u00edvel determinar a expira\u00e7\u00e3o de um arquivo, colocando-o assim em Cache. Al\u00e9m disso \u00e9 poss\u00edvel determinar v\u00e1rios par\u00e2metros adicionais, como tornar o Cache p\u00fablico ou privado. Ele deve ser utilizado para navegadores que utilizam o protocolo HTTP 1.1 para a comunica\u00e7\u00e3o com o servidor.<\/li>\n<\/ol>\n<p>Ap\u00f3s essa explica\u00e7\u00e3o das duas formas de controlar o cache, a d\u00favida geralmente \u00e9 sobre qual modo deve ser usado. Pois saibam que o correto \u00e9 usar os dois, definidos com os mesmos tempos de expira\u00e7\u00e3o, pois o navegador que trabalhar com o protocolo HTTP 1.0 utilizar\u00e1 o Expires, j\u00e1 os navegadores modernos que trabalharem com o HTTP 1.1, utilizar\u00e3o o Cache-Control.<\/p>\n<h3>Habilitando mod_expires e mod_headers no Apache<\/h3>\n<p>A primeira coisa a ser feita para que o mod_expires e o mod_headers possam ser configurados, \u00e9 habilit\u00e1-los no arquivo httpd.conf, conforme figura 1 abaixo.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/4.bp.blogspot.com\/-wk_d8xyTrwk\/Ukr5rrgHfMI\/AAAAAAAAAM0\/JSqjPguQATI\/s1600\/apache-windows-habilitando-mod-headers-mod-expires-httpd.png\" alt=\"apache-windows-hablitando-mod-headers-mod-expires-httpd.conf\" \/><br \/>\nFigura 1 &#8211; Habilitando o\u00a0<strong>mod_expires<\/strong>\u00a0e\u00a0<strong>mod_headers<\/strong>\u00a0no arquivo\u00a0<strong>httpd.conf<\/strong><\/p>\n<p>Ap\u00f3s habilitar o mod_expires e o mod_headers, podemos come\u00e7ar enfim a configur\u00e1-los para que nossos clientes armazenem em cache o conte\u00fado est\u00e1tico do nosso site.<\/p>\n<h4>Configurando o mod_expires no Apache<\/h4>\n<p>O mod_expires possui tr\u00eas diretivas principais, e s\u00e3o elas:<\/p>\n<ul>\n<li><strong>ExpiresActive<\/strong>: Setando o valor desta diretiva para &#8220;on&#8221;, permitimos que o apache fa\u00e7a o controle de cache nos cabe\u00e7alhos http.<\/li>\n<li><strong>ExpiresDefault<\/strong>: Esta diferiva configura o tempo padr\u00e3o de expira\u00e7\u00e3o para todos os tipos de arquivos, no exemplo abaixo est\u00e1 configurado para 1 dia.<\/li>\n<li><strong>ExpiresByType<\/strong>: Esta diretiva permite definir o tipo de arquivo que receber\u00e1 determinado tempo de expira\u00e7\u00e3o. O tempo de expira\u00e7\u00e3o pode ser informado em segundos, minutos, horas, dias, semanas, meses e anos, sempre respeitando as regras de sintaxe corretas.<\/li>\n<\/ul>\n<p>Segue abaixo um exemplo de configura\u00e7\u00e3o para os principais tipos de arquivos servidos em um site.<\/p>\n<pre>&lt;IfModule mod_expires.c&gt;\n\u00a0\u00a0\u00a0\u00a0ExpiresActive on\n\u00a0\u00a0\u00a0\u00a0ExpiresDefault \"access plus 1 day\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType text\/cache-manifest \"access plus 0 seconds\"\n\u00a0\u00a0\u00a0\u00a0# Html\n\u00a0\u00a0\u00a0\u00a0ExpiresByType text\/html \"access plus 0 seconds\"\n\u00a0\u00a0\u00a0\u00a0# Dados\n\u00a0\u00a0\u00a0\u00a0ExpiresByType text\/xml \"access plus 0 seconds\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType application\/xml \"access plus 0 seconds\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType application\/json \"access plus 0 seconds\"\n\u00a0\u00a0\u00a0\u00a0# Feed\n\u00a0\u00a0\u00a0\u00a0ExpiresByType application\/rss+xml \"access plus 1 hour\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType application\/atom+xml \"access plus 1 hour\"\n\u00a0\u00a0\u00a0\u00a0# Favicon\n\u00a0\u00a0\u00a0\u00a0ExpiresByType image\/x-icon \"access plus 1 week\"\n\u00a0\u00a0\u00a0\u00a0# Midia: images, video, audio\n\u00a0\u00a0\u00a0\u00a0ExpiresByType image\/gif \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType image\/png \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType image\/jpg \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType image\/jpeg \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType video\/ogg \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType audio\/ogg \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType video\/mp4 \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType video\/webm \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0# Arquivos htc\n\u00a0\u00a0\u00a0\u00a0ExpiresByType text\/x-component \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0# fonts\n\u00a0\u00a0\u00a0\u00a0ExpiresByType application\/x-font-ttf \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType font\/opentype \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType application\/x-font-woff \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType image\/svg+xml \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType application\/vnd.ms-fontobject \"access plus 1 month\"\n\u00a0\u00a0\u00a0\u00a0# css \/ javascript\n\u00a0\u00a0\u00a0\u00a0ExpiresByType text\/css \"access plus 1 year\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType application\/javascript \"access plus 1 year\"\n\u00a0\u00a0\u00a0\u00a0ExpiresByType application\/x-javascript  \"access plus 1 year\"\n\n\u00a0\u00a0\u00a0\u00a0# Desativar cache para o arquivo index.php\n\u00a0\u00a0\u00a0\u00a0&lt;FilesMatch \"index\\.php$\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ExpiresActive Off\n\u00a0\u00a0\u00a0\u00a0&lt;\/FilesMatch&gt;\n\n&lt;\/IfModule&gt;\n<\/pre>\n<h4>Configurando o mod_headers no Apache<\/h4>\n<p>o mod_headers permite entre outras coisas a configurar o cache-control. A fun\u00e7\u00e3o do Cache-Control (mod_headers) \u00e9 exatamente a mesma do Expires, determinar o tempo de expira\u00e7\u00e3o para qualquer tipo de arquivo por\u00e9m definindo o tempo em segundos, e ainda determinar o tipo do cache, se ele ser\u00e1 p\u00fablico, privado e etc. Apenas navegadores modernos reconhecem o cabe\u00e7alho Cache-Control.<\/p>\n<p>O Cache-Control pode receber at\u00e9 7 informa\u00e7\u00f5es (separadas por v\u00edrgula):<\/p>\n<ul>\n<li><strong>max-age<\/strong>: A informa\u00e7\u00e3o mais importante. Com ela definimos em segundos o tempo de expira\u00e7\u00e3o.<\/li>\n<li><strong>tipo de cache<\/strong>: &#8220;public&#8221; ou &#8220;private&#8221;. A diferen\u00e7a entre eles \u00e9 a seguinte: vamos imaginar que o seu ISP tenha um proxy invis\u00edvel entre voc\u00ea e a Internet, que esteja fazendo cache de p\u00e1ginas web para reduzir o tr\u00e1fego necess\u00e1rio e consequentemente os custos operacionais. Usando &#8220;cache-control: private&#8221;, voc\u00ea est\u00e1 especificando que o ISP n\u00e3o deveria realizar o cache da p\u00e1gina, mas permitindo que o cliente o fa\u00e7a. Se voc\u00ea setar o &#8220;cache-control: public&#8221;, voc\u00ea est\u00e1 informando que qualquer um poder\u00e1 fazer o cache da p\u00e1gina servida, inclusive seu ISP.<\/li>\n<li><strong>no-cache<\/strong>: Apesar desta diretiva parecer que est\u00e1 instruindo o navegador que n\u00e3o fa\u00e7a cache da p\u00e1gina, h\u00e1 uma diferen\u00e7a sutil. A diretiva &#8220;no-cache&#8221;, de acordo com o RFC, diz ao navegador que ele deveria revalidar com o servidor antes de servir a p\u00e1gina a partir do cache. Revalidar \u00e9 a t\u00e9cnica que deixa a aplica\u00e7\u00e3o conserver tr\u00e1fego de rede. Se a p\u00e1gina que o navegador tem em cache n\u00e3o mudou, o servidor apenas sinaliza que o navegador pode servir a p\u00e1gina do cache. Assim na teoria pelo menos, o navegador deveria armazenar a p\u00e1gina em cache, mas exib\u00ed-la a partir do cache somente com revalida\u00e7\u00e3o do servidor. Por\u00e9m alguns navegadores ignoram essa indica\u00e7\u00e3o e implementaram para esta diretiva, o mesmo comportamento da diretiva &#8220;no-store&#8221; explicada abaixo.<\/li>\n<li><strong>no-store<\/strong>: Esta \u00e9 a diretiva &#8220;cache-control&#8221; mais segura. Ela diz ao navegador para n\u00e3o realiar o cache da p\u00e1gina. Sempre que estiver servindo uma p\u00e1gina com informa\u00e7\u00f5es confidenciais, esta diretiva dever\u00e1 ser usada. Perceba que a diretiva &#8220;cache-control: no-cache&#8221; tamb\u00e9m tenha passado a se comportar dessa forma, \u00e9 mais seguro usar ambas as diretivas, &#8220;no-cache&#8221; e &#8220;no-store&#8221;.<\/li>\n<li><strong>must-revalidate<\/strong>: Esta diretiva insiste que o navegador deve revalidar a p\u00e1gina contra o servidor antes de serv\u00ed-la a partir do cache. Note que implicitamente ela deixa o navegador realizar o cache da p\u00e1gina. A diretiva &#8220;no-store&#8221; \u00e9 uma op\u00e7\u00e3o mais segura se voc\u00ea quiser servir uma p\u00e1gina com informa\u00e7\u00f5es sens\u00edeis sem que ela fique salva em cache.<\/li>\n<li><strong>proxy-revalidate<\/strong>: Esta diretiva \u00e9 similar \u00e0 &#8220;must-revalidate&#8221;, exceto que ela objetiva servidores proxy. Ela diz que servidores proxy devem revalidar com o servidor quando servindo esta requisi\u00e7\u00e3o, enquanto o navegador do usu\u00e1rio n\u00e3o necessita revalidar. Esta diretiva \u00e9 \u00fatil quando cache de uma p\u00e1gina autenticada est\u00e1 sendo feito pelo navegador. Voc\u00ea n\u00e3o quer que o servidor proxy tenha uma c\u00f3pia em cache das suas informa\u00e7\u00f5es confidenciais.<\/li>\n<\/ul>\n<p>Abaixo segue alguns exemplos de como configurar o mod_headers<\/p>\n<pre>&lt;IfModule mod_headers.c&gt;\n\u00a0\u00a0\u00a0\u00a0# Cache-Control de 4 horas (14400 segundos) de tipo p\u00fablico\n\u00a0\u00a0\u00a0\u00a0&lt;FilesMatch \"\\.(jpg|jpeg|png|gif|ico|css|js)$\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Header set Cache-Control \"max-age=14400, public\"\n\u00a0\u00a0\u00a0\u00a0&lt;\/FilesMatch&gt;\n\n\u00a0\u00a0\u00a0\u00a0# Desativar cache para o arquivo index.php\n\u00a0\u00a0\u00a0\u00a0# O cabe\u00e7alho \"pragma\" \u00e9 para compatibilidade com o IE\n\u00a0\u00a0\u00a0\u00a0&lt;FilesMatch \"index\\.php$\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Header set Cache-Control \"max-age=0, private, no-store, no-cache, must-revalidate\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Header set Pragma \"no-cache\"\n\u00a0\u00a0\u00a0\u00a0&lt;\/FilesMatch&gt;\n&lt;\/IfModule&gt;\n<\/pre>\n<p>Por fim ainda temos as Entity tags (ETags) que s\u00e3o um tipo de mecanismo feito para checar se existe uma nova vers\u00e3o do arquivo em cache. Com esse mecanismo desabilitado, n\u00f3s impedimos que o cache ou o browser fiquem tentando fazer a valida\u00e7\u00e3o. Para desabilitar o ETag, apenas acrescente no mod_headers o seguinte: Header unset ETag, FileETag None e Header unset Last-Modified.<\/p>\n<p>O mod_headers ficar\u00e1 conforme abaixo:<\/p>\n<pre>&lt;IfModule mod_headers.c&gt;\n\u00a0\u00a0\u00a0\u00a0# Cache-Control de 4 horas (14400 segundos) de tipo p\u00fablico\n\u00a0\u00a0\u00a0\u00a0&lt;FilesMatch \"\\.(jpg|jpeg|png|gif|ico|css|js)$\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Header set Cache-Control \"max-age=14400, public\"\n\u00a0\u00a0\u00a0\u00a0&lt;\/FilesMatch&gt;\n\n\u00a0\u00a0\u00a0\u00a0# Desativar cache para o arquivo index.php\n\u00a0\u00a0\u00a0\u00a0# O cabe\u00e7alho \"pragma\" \u00e9 para compatibilidade com o IE\n\u00a0\u00a0\u00a0\u00a0&lt;FilesMatch \"index\\.php$\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Header set Cache-Control \"max-age=0, private, no-store, no-cache, must-revalidate\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Header set Pragma \"no-cache\"\n\u00a0\u00a0\u00a0\u00a0&lt;\/FilesMatch&gt;\n\u00a0\u00a0\u00a0\u00a0Header unset Etag\n\u00a0\u00a0\u00a0\u00a0FileETag None\n\u00a0\u00a0\u00a0\u00a0Header unset Last-Modified\n&lt;\/IfModule&gt;\n<\/pre>\n<p><strong>Lembrando que todas essas configura\u00e7\u00f5es devem ficar no arquivo httpd.conf ou dentro de algum bloco virtualhost.<\/strong><\/p>\n<h3>Testando a configura\u00e7\u00e3o<\/h3>\n<p>Para testar a configura\u00e7\u00e3o, e comparar os cabe\u00e7alhos enviados pelo servidor, disponibilizo\u00a0<a style=\"color: #888888;\" href=\"http:\/\/infotuts.blogspot.com.br\/p\/127.html\">aqui<\/a>, o conte\u00fado do meu arquivo hosts, e\u00a0<a style=\"color: #888888;\" href=\"http:\/\/infotuts.blogspot.com.br\/p\/arquivo-https-vhostsconf.html\">aqui<\/a>\u00a0o cote\u00fado do meu arquivo httpd-vhosts.conf. Com essa configura\u00e7\u00e3o vai ficar bem simples de podermos testar as nossas configura\u00e7\u00f5es.<\/p>\n<p>A configura\u00e7\u00e3o disponibilizada serve no caso de algum de voc\u00eas desejarem realizar os testes e verificarem os resultados. Pois bem, vamos aos passos necess\u00e1rios para testar:<\/p>\n<ul>\n<li><strong>Passo 1:<\/strong>\u00a0Colocar a configura\u00e7\u00e3o do servidor de acordo com a j\u00e1 disponibilizada.<\/li>\n<li><strong>Passo 2:<\/strong>\u00a0Iniciar o servi\u00e7o do Apache.<\/li>\n<li><strong>Passo 3:<\/strong>\u00a0Acessar o dom\u00ednio: http:\/\/www.exemplo.com. Em seguida abrir o painel de ferramentas do desenvolvedor no chrome ou firefox (F12). Abrir a aba &#8220;Network&#8221;, clicar no item que aparecer na listagem, conforme figura 3 abaixo. Observar o conte\u00fado do response header.<\/li>\n<li><strong>Passo 4:<\/strong>\u00a0Acessar o dom\u00ednio: http:\/\/www.outroexemplo.com. Em seguida abrir o painel de ferramentas do desenvolvedor no chrome ou firefox (F12). Abrir a aba &#8220;Network&#8221;, clicar no item que aparecer na listagem, conforme figura 4 abaixo. Observar o conte\u00fado do response header.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-6QvTGdr1Ycw\/UksCytCNlNI\/AAAAAAAAANE\/yP7Zgadfe1M\/s1600\/apache-windows-habilitando-mod-resultado-navegador-com-cache.png\" alt=\"apache-windows-habilitando-cache-navegador-resultado-com-cache.png\" \/><br \/>\nFigura 3 &#8211; Resultado do cabe\u00e7alho de resposta com o cache habilitado<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/3.bp.blogspot.com\/-TY0yz_n2u_U\/UksC07VEWpI\/AAAAAAAAANM\/h8oY9IuzKYs\/s1600\/apache-windows-habilitando-mod-resultado-navegador-sem-cache.png\" alt=\"apache-windows-habilitando-cache-navegador-resultado-sem-cache.png\" \/><br \/>\nFigura 4 &#8211; Resultado do cabe\u00e7alho de resposta sem o cache habilitado<\/p>\n<h3>Conclus\u00e3o<\/h3>\n<p>Habilitar o cache de navegador pelo servidor \u00e9 muito importante, pois evita download desnecess\u00e1rios, diminuindo tr\u00e1fego de rede e melhorando em muito a experi\u00eancia do usu\u00e1rio ao acessar o seu site.<\/p>\n<div><\/div>\n<\/div>\n<div class=\"post-footer\" style=\"color: #666666;\">\n<div class=\"post-footer-line post-footer-line-1\"><span class=\"post-author vcard\">Postado por\u00a0<span class=\"fn\"><a class=\"g-profile\" style=\"color: #888888;\" title=\"author profile\" href=\"https:\/\/plus.google.com\/108499450718192399623\" rel=\"author\" data-gapiscan=\"true\" data-onload=\"true\" data-gapiattached=\"true\">joao marcos mareto calado\u00a0<\/a><\/span><\/span><span class=\"post-timestamp\">\u00e0s\u00a0<a class=\"timestamp-link\" style=\"color: #888888;\" title=\"permanent link\" href=\"http:\/\/infotuts.blogspot.com.br\/2013\/09\/habilitando-e-configurando-cache-no.html\" rel=\"bookmark\"><abbr class=\"published\" title=\"2013-09-27T10:21:00-07:00\">10:21<\/abbr><\/a>\u00a0<\/span><\/div>\n<div class=\"post-footer-line post-footer-line-1\"><\/div>\n<div class=\"post-footer-line post-footer-line-1\">http:\/\/stackoverflow.com\/questions\/8513791\/htaccess-caching-not-working<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 a todos, no nosso \u00faltimo post, ensinamos como configurar a compress\u00e3o da resposta do servidor aos usu\u00e1rios, diminuindo bastante o conte\u00fado de textos, como html, css e javascript. Desta vez o post ser\u00e1 para ensinarmos o melhor jeito de se implementar o gerenciamento de&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_angie_page":false,"page_builder":"","footnotes":""},"categories":[5],"tags":[],"class_list":["post-2774","post","type-post","status-publish","format-standard","hentry","category-apache2"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2774","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=2774"}],"version-history":[{"count":0,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2774\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=2774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=2774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=2774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}