我有一个在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,使其每次都重新加载。