18

URLConnection を使用して http 接続経由で画像をロードするアプレットがあります。すべての接続に対して setUseCaches(true) を設定していますが、まだキャッシュ動作が見られません。私のイメージの HTTP ヘッダーには適切なキャッシュ設定があります。バグ 4528599を見ると、かなり不可解なステートメントがあります。

Java Plug-In の現在のバージョン (1.3.1) は、名前が .jar または .class で終わるファイルのブラウザ キャッシュのみをチェックします。Java Plug-In 1.4 では、ブラウザのキャッシュで、.class、.jar、.zip、.jpg、.gif、.wav、.au のファイル タイプがチェックされると聞いています。

もちろん、これは 1.6 では FIXED とマークされていましたが、1.6 未満でもキャッシュは見られません。私の画像は PNG ファイルで、実際には .png 拡張子で終わらない場合があります。キャッシュが表示されません。

バグ修正レポートは 1.6 統合ダウンロード エンジンについて述べていますが、Google はそれについてあまり知らないようです。

これは機能するはずですか、それとも壊れた Sun の「機能」の 1 つにすぎませんか。アプレットにブラウザのキャッシュから PNG 画像をロードさせる方法または回避策はありますか? 私は自分自身を実装したくない....

更新: キャッシングはResponseCache実装に関連付けられているようです。その仕組みの詳細については、このテクニカルノートを参照してください。最後の行は次のように述べています。

Java 2 Standard Edition には、URLConnection キャッシングのデフォルト実装はありません。ただし、Java Plugin と Java WebStart はすぐに使用できるものを提供します。

したがって、問題は次のようになるように思えます。Java プラグインの ResponseCache 実装は実際にどのように機能するのでしょうか。v1.4/v1.5/v.16 の違いは何ですか?

誰でもアイデアはありますか?

4

2 に答える 2

7

このメソッドは、送信リクエストのHTTP Cache-Controlヘッダーディレクティブのみを、キャッシュを許可する値に設定する可能性があります。setUseCaches(false)を呼び出した場合、

Cache-Control: no-cache

たとえば、ディレクティブ。これを確認するには、アプレットとサーバーの間にHTTPデバッグプロキシサーバーを配置し、ヘッダーを確認します。

リクエストがキャッシュを使用する意思があると言っているからといって、サーバーがキャッシュを有効にするように設定されていない可能性があります。おそらく、応答に適切に長い時間がかかるExpiresヘッダーを設定していないか、キャッシュを禁止する応答にCache-Controlヘッダーを設定している可能性があります。

チェックする他のいくつかの事柄:

  • https応答がキャッシュされることはありません。
  • クライアントとサーバーの間にHTTPキャッシュがない可能性があります。
  • 唯一のHTTPキャッシュはブラウザのキャッシュですが、無効になっている場合や、ディスクをほとんど使用しないように設定されている場合があります。

これが単なるバニラブラウザからWebアプリケーションへのテストである場合は、更新ボタンを押していないことも確認する必要があります。これは、キャッシュなしを設定することと同じです。

于 2009-08-25T21:43:41.920 に答える
4

抽象クラス URLConnection は、任意のサブクラスで使用できるset/getUseCaches メソッドを提供します。ただし、私がこれまでに確認できた限りでは、HttpURLConnection クラスはこれらのフィールドをまったく使用していません。値を true または false に設定しても、異なる動作はありません。

http キャッシュ動作を追加したい場合は、自分で行う (独自に記述するか、HttpURLConnector を拡張するか、ソケットを使用する) か、If-Modified-SinceヘッダーとIf-None-Matchヘッダーを使用してステータスを探します。コード 304 (未変更)。2 番目のオプションはおそらく最も簡単で、最良の結果が得られます。

于 2009-08-25T22:57:10.510 に答える