0

に実装された小さな動的サイトがあり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 を毎回リロードするように毒しているかどうかを知るには十分ではありません。

4

1 に答える 1

1

私の回答が役に立つかどうかはわかりませんが、とにかく投稿します。Python アプリケーション内から画像ファイルを提供する代わりに、Apache 内 (同じサーバー上) に別の仮想ホストを作成して、静的ファイルと画像ファイルを提供することができます。あなたのpythonアプリケーションでは、このような画像を埋め込むことができます

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

個別の仮想ホストを使用すると、モード ヘッダーを使用してさまざまなコンテンツ タイプにさまざまなヘッダーを追加したり、静的ファイルに別のキャッシュ レイヤーを追加したりできます。

この助けを願っています。

于 2012-04-05T07:46:22.003 に答える