我正在我的网站上运行Google PageSpeed,它告诉我我需要 “指定缓存验证程序。”
以下资源缺少缓存验证程序。无法有效刷新未指定缓存验证程序的资源。指定Last-Modified或ETag标头以启用以下资源的缓存验证:
...然后列出图像,CSS,JS等。
根据http://code.google.com/speed/page-speed/docs/caching.html#LeverageBrowserCaching:
将Last-Modified日期设置为上次更改资源的时间。如果Last-Modified日期在过去足够远,浏览器很可能不会重新获取它。
我的.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>
我做错了什么?
答案 0 :(得分:16)
我认为您遇到的问题是Expire:
,而不是Last-Modified:
。默认情况下,Apache会根据文件日期发送文件Last-Modified:
标头。我建议删除上面的代码并将其替换为以下内容:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 year"
</IfModule>
尝试使用它,如果它不起作用,请尝试添加它:
<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>
答案 1 :(得分:6)
要设置“缓存验证程序”,您需要在标题中发送以下内容:
Expires
或 Cache-Control: max-age
和的
Last-Modified
或 ETag
因此,例如,在PHP中,您可以为CSS和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>
这将满足Google的Pagespeed计算器。
答案 2 :(得分:1)
我测试了以上所有代码,但看不到gtmetrix排名的变化。 为我的wordpress网站使用这个改进的Cache-Control(指定缓存验证器)排名:
## 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>
我建议您自己定制网站的最大年龄值及其文件。