に実装された小さな動的サイトがありmod_python
ます。私はこれを継承し、コンテンツとロジックに比較的小さな変更を加えることに成功しましたが、HTTP キャッシングについては理解が深まりませんでした。サイトは既に正常に動作しているため、動的サイトのキャッシュを無効にする方法について、これは「通常の質問」ではありません。
私の問題は、各ページに 1 つの大きなバナー画像 (各ページの同じ URL からの同じ画像) があり、サイトの帯域幅の約 90% を占めていますが、私が知る限り、キャッシュされていません。新しいページをクリックするたびにサイトを閲覧すると(または以前にアクセスしたページに戻ると)、サイトは再びダウンロードされます。
(ヘッダーを表示するために) バナーの画像 URL を wget すると、次のように表示されます。
$ 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 は、リクエストの name パラメータから変更されたファイル パスです。
私の質問は: イメージのリクエスト応答に Expires: または Vary: フィールドを設定する方法に沿って、クライアントが繰り返しダウンロードすることに熱心でなくなるような簡単な修正はありますか?
このサイトは Ubuntu 10.04 でホストされており、書き換え以外のデフォルト以外の apache mod は有効になっていません。
サイトページのヘッダー自体のほとんど(すべてではない)に含まれていることに注意してください
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
Vary: Accept-Encoding
(そして、元のサイトの作成者は、キャッシュなしが非静的コンテンツ ページに選択的に適用されるため、これについて明確に考えていました)。キャッシングについては、これが何らかの形で含まれている .gif IMG を毎回リロードするように毒しているかどうかを知るには十分ではありません。