2

我有一个网站

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

在每次显示图像时,我们只需使用绝对 URL 来获取它,就像这样

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

因此,每次用户访问 www.somesite1.com 获取内容时,www.somesite2.com 都会受到打击。

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

4

4 回答 4

4

最简单的答案是设置一个 HTTP Expires 标头,该标头具有很远的未来值(例如 10 年)。这样(理论上)如果您有很多重复访问,浏览器不应该再次请求该图像以减轻服务器的巨大负载。当然,当您想要更新图像时,您需要想出一种更改图像 url 的机制。大多数人通过将内部版本号添加到某处的路径中(或通过将内部版本号附加到查询字符串)来解决此问题。

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

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

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

http://www.lighttpd.net/

http://nginx.net/

于 2009-02-05T08:52:23.950 回答
1

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

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

不过,我同意 Andy Hume 的观点,如果您确实需要第二台服务器,请保持轻量并使用 lighttpd 和 Squid 之类的东西。

于 2009-02-06T16:04:15.497 回答
0

您的设置没有任何问题,它运行良好。要了解您需要做什么才能使其更好地工作,您必须了解浏览器的工作原理。

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

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

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

于 2009-02-05T09:04:00.120 回答
0

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

于 2009-02-05T08:43:42.707 回答