私はmod_python
で実装小さなダイナミックなサイトを持っています。私はこれを継承しましたが、コンテンツとロジックに比較的小さな変更を加えても、HTTPキャッシュを使用すると、私は徹底的に外れています。サイトには、すでに正常に動作しますので、これは、動的なサイトのためにどのように無効キャッシュに関する「いつもの質問」ではありません。クライアントが選択したイメージコンテンツをキャッシュできるようにmod_pythonサイトを取得するには?
私の問題は、サイトの帯域幅の約90%を占めるが、私が言うことができる限りキャッシュされていない各ページ(同じページの同じURLからの同じ画像)に1つの大きなバナー画像があることです。新しいページをクリックするたびに(または以前に訪問したページに)クリックするたびにサイトを参照するので、もう一度それをダウンロードしています。
私は私が見る(ヘッダを参照すること)バナーの画像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)
フルネームよりもはるかにではありませんリクエストのnameパラメータからmungedされたファイルパスです。
私の質問は:有効期限設定の線に沿っていくつかの簡単な修正がある:またはヴァリ:クライアントはそれを繰り返しダウンロードするあまり熱心であることになり、画像のリクエスト・レスポンスのフィールド?
サイトでは、Ubuntuの10.04でホストされていると、任意の非デフォルトのApacheの改造が書き換え以外に有効になっていません。
私は、サイトのページヘッダの(すべてではない)ほとんどは自身が含まれていないことに注意して
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
Vary: Accept-Encoding
(および無キャッシュが非静的に選択的に適用されていないとして、元のサイトの作者は明らかにこのことについて考えていますコンテンツページ)。私はキャッシングについて十分に知っていないので、これが何とかインクルードされた.gif IMGが毎回リロードされるかどうかを知ることができません。
おかげで、これは右の行に私を置く:私は、ほぼ同じことをやってしまったと単純に同じドメイン上の別のパスに出バナー画像ファイルを移動し、完全に動的なものを避け、1ページテンプレートの更新それを参照してください。そして、サイトはただちにバナーが1ページごとにダウンロードされるのを待っているのではないでしょうか。 – timday