在这里阅读了很多文章和一些问题后,我终于成功激活了Apache mod_expires,告诉浏览器它必须缓存1年的图像.
<filesMatch "\.(ico|gif|jpg|png)$">
ExpiresActive On
ExpiresDefault "access plus 1 year"
Header append Cache-Control "public"
</filesMatch>
Run Code Online (Sandbox Code Playgroud)
谢天谢地,服务器响应似乎是正确的:
HTTP/1.1 200 OK
Date: Fri, 06 Apr 2012 19:25:30 GMT
Server: Apache
Last-Modified: Tue, 26 Jul 2011 18:50:14 GMT
Accept-Ranges: bytes
Content-Length: 24884
Cache-Control: max-age=31536000, public
Expires: Sat, 06 Apr 2013 19:25:30 GMT
Connection: close
Content-Type: image/jpeg
Run Code Online (Sandbox Code Playgroud)
好吧,我认为这会阻止浏览器下载甚至向服务器询问有关图像的信息,为期1年.但部分原因是:如果您关闭并重新打开浏览器,浏览器不会再从服务器下载图像,但浏览器仍然会向每个图像发送HTTP请求来询问服务器.
如何强制浏览器停止为每个图像发出HTTP请求?即使这些HTTP请求后面没有下载的图像,它们仍然是向服务器发出的请求,这些请求可能会造成延迟,并减慢页面渲染速度!
我已经告诉浏览器它必须将图像保存在缓存中1年!为什么浏览器仍在为每个图像查询服务器(即使它没有下载图像)?!
查看FireBug中的网络图(菜单FireBug> Net> Images)我可以看到不同的缓存行为(我显然开始使用浏览器缓存完全空,我使用"清除所有历史记录"强制在浏览器上删除缓存):
当第一次加载页面时,所有图像都被下载(如果我通过单击浏览器的重新加载页面按钮强制页面重新加载,则会发生同样的事情).这很有道理!
当我浏览网站并返回同一页面时,根本不会下载图像,浏览器甚至不会向服务器询问 …