0

我有一个在mod_python. 我继承了这一点,虽然我已经成功地对其内容和逻辑进行了相对较小的更改,但使用 HTTP 缓存我已经超出了我的深度。该站点已经运行良好,因此这不是关于如何禁用动态站点缓存的“常见问题”。

我的问题是每个页面上都有一个大横幅图片(每个页面上来自相同 URL 的相同图片)占站点带宽的约 90%,但据我所知没有被缓存;当我每次点击新页面(或返回以前访问过的页面)时浏览该网站时,它会再次下载它。

如果我 wget 横幅的图像 URL(查看标题),我会看到:

$ wget -S http://example.com/site/gif?name=banner.gif
--2012-04-04 23:02:38--  http://example.com/site/gif?name=banner.gif
Resolving example.com... 127.0.0.1
Connecting to example.com|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Date: Wed, 04 Apr 2012 22:02:38 GMT
  Server: Apache/2.2.14 (Ubuntu)
  Content-Location: gif.py
  Vary: negotiate
  TCN: choice
  Set-Cookie: <blah blah blah>
  Connection: close
  Content-Type: image/gif
Length: unspecified [image/gif]
Saving to: `gif?name=banner.gif'

并且提供它的代码只不过是

    req.content_type = 'image/gif'
    req.sendfile(fullname)

其中 fullname 是从请求的名称参数修改的文件路径。

我的问题是:在图像的请求响应中设置 Expires: 或 Vary: 字段是否有一些快速修复会导致客户不太热衷于重复下载它?

该站点托管在 Ubuntu 10.04 上,除了 rewrite 之外,没有启用任何非默认 apache mods。

我注意到大多数(不是全部)网站页面的标题本身确实包含

Pragma: no-cache
Cache-Control: no-cache
Expires: -1
Vary: Accept-Encoding

(并且原始站点作者​​已经清楚地考虑了这一点,因为 no-cache 被选择性地应用于非静态内容页面)。我对缓存知之甚少,不知道这是否会以某种方式毒化包含的 .gif IMG,使其每次都重新加载。

4

1 回答 1

1

不知道我的回答能不能帮到你,反正我发了。您可以在 apache(在同一台服务器上)中创建另一个虚拟主机,而不是从 python 应用程序中提供图像文件,以提供静态和图像文件。在您的 python 应用程序中,您可以嵌入这样的图像

<img src="http://img.yoursite.com/banner.gif" alt="banner" />

使用单独的虚拟主机,您可以使用模式标头将各种标头添加到各种内容类型,或者为您的静态文件添加另一个缓存层。

希望这有帮助。

于 2012-04-05T07:46:22.003 回答