1

良い一日、

サーバーへの特定のパスをフィルタリングするためにCacheFilterを使用しています(画像ストリームを応答ストリームに出力します)。そして、次のように web.xml で構成しました。

<filter>
    <filter-name>imagesCache</filter-name>
    <filter-class>com.samaxes.cachefilter.presentation.CacheFilter</filter-class>
    <init-param>
        <param-name>privacy</param-name>
        <param-value>public</param-value>
    </init-param>
    <init-param>
        <param-name>expirationTime</param-name>
        <param-value>2592000</param-value>
    </init-param>
</filter>

...
<filter-mapping>
    <filter-name>imagesCache</filter-name>
    <url-pattern>/my/path/*</url-pattern>
</filter-mapping>

Firefox を使用して、アドレス バーから URL にアクセスすると、最初はサーバーにヒットしますが、後続の呼び出しではキャッシュが使用されます。ただし、URL が自分のページ内にある場合 (つまり<img src="..."/>)、常にサーバーにアクセスしているようです。

[編集] さらにいくつかのテストを行った後、アドレス バーからの画像へのアクセスが常に機能しません。しかし、キャッシングは よりも頻繁に機能するようです。本当かどうかは、定かではありません。

追加情報: 私のパスは /my/path?then=some&query=strings のようなものです。拡張子 (gif、png、jpeg など) はありませんが、MIME タイプが適切に設定されていることに注意してください (image/gif、image/png、image/jpeg )。拡張子の欠如やクエリ文字列の存在が影響を与えるかどうかはわかりません。(また、別のメモ。私の URL にはクエリ文字列がありますが、同じ uri + クエリ文字列をテストで何度も使用しています)。

理由はありますか?

ありがとう

4

2 に答える 2

1

送信されている HTTP リクエスト、特にその画像リクエストに対して送信されている HTTP ヘッダーを調査します。Firefox プラグインを使用したり、(HttpServletRequestオブジェクト内の) サーブレット エンドのヘッダーを確認したりできます。

于 2009-07-07T10:41:16.380 に答える
1

リクエスト内の Cache-Control ヘッダーを特に探したいとします。要求が Cache-Control: no-cache または Cache-Control: max-age=0 のようなものを示している場合、キャッシュはキャッシュされたコピーを提供できません。または、レスポンスに含まれる Expires ヘッダーの時間が近すぎる場合、長時間キャッシュすることはできません。

ヘッダーと説明の完全なリストは、HTTP 1.1 仕様にあります。HTTP でのキャッシング (13)およびヘッダー フィールド定義 (14)を参照してください。

Firebug プラグインは、Firefox を使用して要求ヘッダーと応答ヘッダーをチェックするための 1 つの良い方法です。

また、Firefox の使い方にも注意してください。更新ボタンを押すことは、Cache-Control: no-cache と言うのと同じです。これは、可能な限り最新のコピーが必要であることを示しており、元の Web サーバーに戻ることができます。

于 2009-07-07T12:23:28.087 に答える