2010-06-14 68 views
1

我们的网站刚刚转换为由mod_rewrite和php脚本生成。当浏览器看起来应该是图片时,图片不会缓存。静态图像没有用php生成的页面缓存

所有图像格式遵循:

<img src="/images/header.png" /> 

我必须避免脚本完全缓存因为PHP解析器需要动态地处理每个请求的每个页面;然而,大图像的下载开销在每个单页负载上都很麻烦。

我会理想地为“Cache-Control:no-cache,must-revalidate”和“Expires:some_date_in_the_past”提供标头以强制重新验证PHP脚本。

为什么浏览器不会在所有页面中使用一致的href值来缓存静态图像?

+0

因为你告诉它不要缓存,它必须每次重新验证?这可能是我读过的最令人困惑的事情。 – animuson 2010-06-14 20:05:38

回答

2

你可以在你的.htacess文件中告诉你要在哪些文件扩展名上应用某些标题,以便为静态内容提供远期未来的过期标题以及可能希望编写的动态内容缓存控制无缓存必须重新验证。

<IfModule mod_deflate.c> 
<FilesMatch "\.(js|css|htm|php)$"> 
SetOutputFilter DEFLATE 
</FilesMatch> 
</IfModule> 

<IfModule mod_expires.c> 
    <FilesMatch "\.(gif|jpg|jpeg|png|swf|css|js|html?|xml|txt)$"> 
     ExpiresActive On 
     ExpiresDefault "access plus 10 years" 
     ExpiresByType image/x-icon A604800 
     Header set Cache-Control "max-age=290304000, public" 
    </FilesMatch> 
</IfModule> 

就像在这个例子中,我添加了一个很远的将来到期的标题到所有不同的静态文件匹配。

请注意FileMatch标记和文件扩展名。 .htacess文件保存在应用程序中的任何文件夹中,并将该设置提供给该文件夹。

+0

看起来头文件正在使用新的.htaccess文件正确发送,但浏览器仍在每页加载中请求图像。 http://getsoundaround.com/images/icons/icon_email.png GET /images/icons/icon_email.png HTTP/1.1 HTTP/1.1 200 OK 日期:星期一,2010 6月14日21:04: 14 GMT 服务器:Apache/2.2.12(Ubuntu) 最后修改时间:星期二,16十二月2008 11:52:18 GMT Etag:“3602e-1f8-45e28975d0080” Accept-Ranges:bytes Content-Length: 504 Cache-Control:max-age = 290304000,public 有效期至:2020年6月11日星期四21:04:14 GMT 连接:关闭 Content-Type:image/png – scootklein 2010-06-14 21:10:48