什么是在我的网站上缓存图像的最佳方式?

时间:2009-02-05 08:40:00

标签: html apache caching http-headers

我有一个网站

www.somesite1.com从www.somesite2.com获取所有图像内容

每次要显示图像时,我们只需使用绝对URL就可以得到它

<img src="http://www.somesite2.com/images/myimage.jpg" />

因此,每当用户访问www.somesite1.com获取内容时,www.somesite2.com就会受到重创。

我正在寻找缓存图像的聪明方法,可能使用http标头等。感谢

4 个答案:

答案 0 :(得分:3)

最简单的答案是设置具有远期未来值(例如10年)的HTTP Expires标头。这种方式(理论上)如果您有大量的重复访问,浏览器永远不应该再次请求该图像从服务器上卸下大量负载。当然,当您想要更新图像时,您需要提供一种更改图像URL的机制。大多数人通过在某个地方的路径中添加内部版本号(或者通过在查询字符串中附加内部版本号)来实现此目的。

这里有一些关于性能的好信息(包括使用Expires标头):

http://developer.yahoo.com/performance/rules.html

我个人不担心在服务器端缓存这些(我认为它们不是动态生成的)。它们直接从光盘提供,因此无论如何都要小。确保您有一台单独的机器来提供静态内容,并使用非常轻量级的Web服务器,例如Lighttpd或nginx,它们有助于提高吞吐量。

http://www.lighttpd.net/

http://nginx.net/

答案 1 :(得分:0)

仅为图像保留单独的网络服务器,因为图像是单独的http请求。

答案 2 :(得分:0)

您的设置没有任何问题,它完美无缺。要了解如何使其更好地工作,您必须了解浏览器的工作原理。

首先,它将从www.somesite1.com上阅读HTML文档。然后它将读取它,寻找任何URL。当它找到任何内容时,它将开始下载它们。

因此,从浏览器的角度来看,站点1和站点2之间没有关系。如果要改进站点2的缓存,可以完全忽略站点1。

这意味着您必须告知站点2上的Web服务器将正确的缓存信息发送到浏览器。例如,让它响应HEAD requests和/或将图像的生命周期设置为标题字段Cache-Control中的某个较大值。

答案 3 :(得分:0)

除非您的网站非常受欢迎,否则您可能不需要第二台服务器用于静态内容。

如果您使用的是Apache HTTP,则可以安装mod_cache。您还可以查看安装Squid Cache。

我同意Andy Hume的观点,如果你确实需要第二台服务器,那么请保持清淡并使用像lighttpd和Squid这样的东西。