ti-enxame.com

.htaccess: Como "Especificar um validador de cache"?

Estou executando o Google PageSpeed ​​no meu site e me diga que eu preciso
"Especifique um validador de cache."

Os seguintes recursos estão sem um validador de cache. Os recursos que não especificam um validador de cache não podem ser atualizados com eficiência. Especifique um cabeçalho Last-Modified ou ETag para ativar a validação de cache para os seguintes recursos:

... então lista imagens, CSS, JS, etc.

De acordo com http://code.google.com/speed/page-speed/docs/caching.html#LeverageBrowserCaching :

Defina a data da última modificação para a última vez que o recurso foi alterado. Se a data da última modificação for suficientemente longe no passado, é provável que o navegador não a refaça.

Eu tenho o seguinte no meu .htaccess:

<IfModule mod_headers.c>
    <FilesMatch "\.(bmp|css|flv|gif|ico|jpg|jpeg|js|pdf|png|svg|swf|tif|tiff)$">
        Header set Last-Modified "Tue, 31 Aug 2010 00:00:00 GMT"
    </FilesMatch>
</IfModule>

O que estou fazendo errado?

23
StackOverflowNewbie

Eu acho que o problema que você está tendo é com Expire: e não com Last-Modified:. Por padrão, o Apache envia o arquivo Last-Modified: cabeçalho com base na data do arquivo. Sugiro remover o código superior e substituí-lo pelo seguinte:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 year"
</IfModule>

Tente com isso, se não funcionou, tente adicionar também:

<IfModule mod_headers.c>
    <FilesMatch "\.(bmp|css|flv|gif|ico|jpg|jpeg|js|pdf|png|svg|swf|tif|tiff)$">
        Header set Last-Modified "Mon, 31 Aug 2009 00:00:00 GMT"
    </FilesMatch>
</IfModule>
16
aularon

Para "Definir um validador de cache", você precisa enviar o seguinte em seus cabeçalhos:

ExpiresoCache-Control: max-age

[~ # ~] e [~ # ~]

Last-ModifiedoETag

Assim, por exemplo, em PHP, você pode adicionar o seguinte para arquivos CSS e JS:

<filesMatch "\.(js|css)$">
    Header set Expires "Thu, 21 May 2013 20:00:00 GMT"
    Header set Last-Modified "Thu, 21 May 2012 20:00:00 GMT"
</filesMatch>

Isso satisfará a calculadora Pagespeed do Google.

6
Chuck Le Butt

Eu testei todos os códigos acima, mas não vejo alteração no ranking do gtmetrix. Usando este controle de cache aprimorado (especifique um validador de cache) para o meu site wordpress:

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access plus 1 year"
</IfModule>
## EXPIRES CACHING ##

<ifModule mod_headers.c>
  <filesMatch "\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>

  <filesMatch "\\.(css)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>

  <filesMatch "\\.(js)$">
    Header set Cache-Control "max-age=216000, private"
  </filesMatch>

  <filesMatch "\\.(xml|txt)$">
    Header set Cache-Control "max-age=216000, public, must-revalidate"
  </filesMatch>

  <filesMatch "\\.(html|htm|php)$">
    Header set Cache-Control "max-age=1, private, must-revalidate"
  </filesMatch>
</ifModule>

Eu recomendo que você personalize os valores de idade máxima para seu site e seus arquivos.

2
Morteza Ziyae